我們?cè)诳碅irtest的文檔時(shí),肯定會(huì)發(fā)現(xiàn)它有這樣一段代碼:
方框中的這一段代碼的意思是,通過(guò)包名來(lái)啟動(dòng)一個(gè)App。
當(dāng)你電腦只連接了1臺(tái)手機(jī)的時(shí)候,這樣做是沒有問(wèn)題的,但是你有沒有考慮過(guò),如果你電腦里面連接了很多臺(tái)手機(jī),那么你直接這樣沒頭沒尾的 start_app
啟動(dòng)一個(gè)App,你啟動(dòng)的是哪個(gè)手機(jī)上的App?
要解決這個(gè)問(wèn)題,就要從如何連接多臺(tái)手機(jī)這個(gè)話題說(shuō)起了。關(guān)于如何連接多臺(tái)手機(jī),Airtest的官方文檔可以說(shuō)是寫的非常模糊。
經(jīng)過(guò)我的測(cè)試,下面這種方案是最有效的:
-
from airtest.core.api import connect_device
-
device_1 = connect_device('android:///串號(hào)1')
-
device_2 = connect_device('android:///串號(hào)2')
-
device_3 = connect_device('android:///串號(hào)3')
當(dāng)你這樣連接了3個(gè)手機(jī)以后,如果直接執(zhí)行 start_app
,那么你會(huì)在 串號(hào)1
對(duì)應(yīng)的手機(jī)上啟動(dòng)App。
此時(shí)如果你執(zhí)行下面的代碼,你會(huì)發(fā)現(xiàn)返回一個(gè)有3個(gè)元素的列表:
-
>>> from airtest.core.api import G
-
>>> G.DEVICE_LIST
-
[<airtest.core.android.android.Android object at 0x118c55cc0>, <airtest.core.android.android.Android object at 0x118a4f550>, <airtest.core.android.android.Android object at 0x11b0ec358>]
這就是你當(dāng)前連接的三個(gè)手機(jī)。如果你想控制第二個(gè)手機(jī)怎么辦呢?使用下面的命令:
-
from airtest.core.api import set_current
-
?
-
set_current(1)
-
start_app('包名')
set_current(1)
里面的1對(duì)應(yīng)了列表下標(biāo)為1的這個(gè)手機(jī)。也就是第二個(gè)加入的手機(jī)。
同理,當(dāng)你想在第三個(gè)手機(jī)上啟動(dòng)App時(shí),你需要再切換為 set_current(2)
。
這種方式用起來(lái)確實(shí)比較麻煩,所以我一般會(huì)使用Poco的接口來(lái)直接操作每一個(gè)手機(jī)。所以此時(shí)需要把 device_1
, device_2
和 device_3
作為參數(shù)傳入給 AndroidUiautomationPoco
,代碼如下:
-
from airtest.core.api import connect_device
-
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
-
?
-
?
-
device_1 = connect_device('android:///串號(hào)1')
-
device_2 = connect_device('android:///串號(hào)2')
-
device_3 = connect_device('android:///串號(hào)3')
-
?
-
poco_1 = AndroidUiautomationPoco(device_1, use_airtest_input=True, screenshot_each_action=False)
-
poco_2 = AndroidUiautomationPoco(device_2, use_airtest_input=True, screenshot_each_action=False)
-
poco_3 = AndroidUiautomationPoco(device_3, use_airtest_input=True, screenshot_each_action=False)
-
?
-
poco_1(text='微信').click()
-
poco_2(text='微信').click()
-
poco_3(text='微信').click()
使用這種方式,就不需要來(lái)回切換,并且還可以使用多線程直接同時(shí)控制每一臺(tái)手機(jī)。
?
本文摘自 :https://blog.51cto.com/u