appiumマルチデバイス、再接続最適化オープンソース
7881 ワード
前にPageObject+Python+Appiumを共有しました
このバージョンは前回のバージョンに対して大きく変更され、主に解決されました.失敗再接続1回(デフォルト1回)複数回構成可能 appium 1に基づく.7.1 uiautomator2 uiautomator 2起動タイムアウト の解決新しいチェックポイントキーワード、contrary_getval,exceptsl,contraryはymlプロファイルにしばらく書かずpageレイヤに直接書かれています チェックポイントキーワードcontrary:反対にチェックポイント、伝1はチェック要素が存在する場合は失敗を示し、削除後も が存在する.チェックポイントキーワードtoast:プロンプトボックスチェックポイント を示す.チェックポイントキーワードcontrary_getval:反対の値チェックポイント、比較に成功した場合は に失敗しました.チェックポイントキーワードcheck:カスタムチェック結果 チェックポイントキーワードexcepts:1の場合、操作に異常が発生したことを示すチェックポイントが成功します.削除に成功した場合、このデータが存在しない場合は真 試験報告書は複数台の試験機の結果統計(アンドロイド) を追加した. mac、windowsプラットフォーム 適切iosテスト(簡単なデバッグに合格し、後で実際に使用し、最適化する機会がある) コードプロファイル
ymlテスト例
ある例のpageレイヤ pagesは再び1層パッケージされ、主に再接続メカニズムの実現を見ることができる. 実は主にlaunchを使っています.app+setupclass、もう一つの利点は、使用例依存を回避し、session を再起動しないことです.
testcaseレイヤ呼び出しpageレイヤ
コードエントリ
面倒なケースいくつかの使用例に遭遇すると、交換空間位置 を長押しするなど、page層を単独で書かなければならない.カスタムpageレイヤ yamlの例では、page用 のキーワードをカスタマイズできます.
その他ちなみにフロートに遭遇してクリックできません フローティングレイヤは、要素を認識することができ、クリックをトリガーしたが失効する処理方法は、要素座標を取得し、adb shell方式でトリガーすることであり、興味のあるものはadb_を見ることができる.tapキーワードのパッケージ 他の最適化は私のCHANGELOG を見ることができますオープンソースアドレス 関連ディスカッション:https://testerhome.com/topics/11720
このバージョンは前回のバージョンに対して大きく変更され、主に解決されました.
ymlテスト例
testinfo:
- id: test004
title:
info:
testcase:
- element_info: com.huawei.works.knowledge:id/title
find_type: ids
index: 0
operate_type: get_value
info:
- element_info: com.huawei.works.knowledge:id/title
find_type: ids
index: 0
operate_type: click
is_time: 3
info:
- element_info: h5-scroll
find_type: id
is_webview: 1 # webview
info:
- element_info: com.huawei.works.knowledge:id/vtb_img_left
find_type: id
is_webview: 2 # native
operate_type: click
info:
- element_info: com.huawei.works.knowledge:id/vtb_img_right2
find_type: id
operate_type: click
info:
check:
- element_info: com.huawei.works.knowledge:id/browser_knowledge_history_text
find_type: ids
index: 0
operate_type: get_value
info:
ある例のpageレイヤ
from PageObject import Pages
class DayNewHistoryPage:
'''
'''
def __init__(self, kwargs):
_init = {"driver": kwargs["driver"], "path": kwargs["path"], "device": kwargs["device"],
"logTest": kwargs["logTest"], "caseName": kwargs["caseName"]}
self.page = Pages.PagesObjects(_init)
def operate(self): #
self.page.operate()
def checkPoint(self): #
self.page.checkPoint()
if result is not True and be.RE_CONNECT:
self.msg = " , :" + self.testInfo[0]["msg"]
self.logTest.buildStartLine(self.caseName + "_ ") #
self.operateElement.switchToNative()
self.driver.launch_app()
self.isOperate = True
self.get_value = []
self.is_get = False
self.operate() #
result = self.check(kwargs) #
self.testInfo[0]["msg"] = self.msg
self.operateElement.switchToNative()
testcaseレイヤ呼び出しpageレイヤ
class HomeTest(ParametrizedTestCase):
#
def testAHomeSwipeDown(self):
app = {}
app["logTest"] = self.logTest
app["driver"] = self.driver
app["path"] = PATH("../yaml/home/HomeSwipeDown.yaml")
app["device"] = self.devicesName
app["caseName"] = sys._getframe().f_code.co_name
page = HomeSwipeDownPage(app)
page.operate()
page.checkPoint()
# banner
def testB0annerHistory(self):
app = {}
app["logTest"] = self.logTest
app["driver"] = self.driver
app["path"] = PATH("../yaml/home/BannerHistory.yaml")
app["device"] = self.devicesName
app["caseName"] = sys._getframe().f_code.co_name
page = BannerHistoryPage(app)
page.operate()
page.checkPoint()
@classmethod
def setUpClass(cls):
super(HomeTest, cls).setUpClass()
@classmethod
def tearDownClass(cls):
super(HomeTest, cls).tearDownClass()
コードエントリ
def runnerCaseApp(devices):
starttime = datetime.now()
suite = unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(HomeTest, param=devices))
suite.addTest(ParametrizedTestCase.parametrize(TestWeiQunTest, param=devices))
unittest.TextTestRunner(verbosity=2).run(suite)
面倒なケース
.....
def operate(self):
for item in self.testCase:
m_s_g = self.msg + "
" if self.msg != "" else ""
result = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
if not result["result"]:
msg = " , " + item["element_info"]
print(msg)
self.msg = m_s_g + msg
self.testInfo[0]["msg"] = msg
self.isOperate = False
return False
if item.get("operate_type", "0") == "location":
app = {}
web_element = self.driver.find_elements_by_id(item["element_info"])[item["index"]]
start = web_element.location
#
app["startX"] = start["x"]
app["startY"] = start["y"]
#
size1 = web_element.size
width = size1["width"]
height = size1["height"]
#
endX = width + app["startX"]
endY = height + app["startY"]
app["endX"] = endX - 20
app["endY"] = endY - 60
self.location.append(app)
# self.driver.swipe(endX, endY, starty, endY)
if item.get("operate_type", "0") == be.GET_VALUE:
self.get_value.append(result["text"])
if item.get("is_swpie", "0") != "0":
print(self.location)
self.driver.swipe(self.location[0]["endX"], self.location[0]["endY"], self.location[1]["endX"], self.location[1]["endY"]+10)
testinfo:
- id: test019
title:
info:
testcase:
- element_info: com.huawei.works.knowledge:id/vtb_img_right
find_type: id
operate_type: click
info:
- element_info: com.huawei.works.knowledge:id/my_card_item_name_text
find_type: ids
index: 1
operate_type: get_value
info:
- element_info: com.huawei.works.knowledge:id/drag_item_image
find_type: ids
index: 0
operate_type: location
info:
- element_info: com.huawei.works.knowledge:id/drag_item_image
find_type: ids
index: 1
operate_type: location
is_swpie: 1 # ,
info:
- element_info: com.huawei.works.knowledge:id/vtb_img_left
find_type: id
operate_type: click
info:
check:
- element_info: com.huawei.works.knowledge:id/title_txt
find_type: id
operate_type: get_value
その他