我們在看Airtest的文檔時,肯定會發(fā)現(xiàn)它有這樣一段代碼:
方框中的這一段代碼的意思是,通過包名來啟動一個App。
當你電腦只連接了1臺手機的時候,這樣做是沒有問題的,但是你有沒有考慮過,如果你電腦里面連接了很多臺手機,那么你直接這樣沒頭沒尾的 start_app
啟動一個App,你啟動的是哪個手機上的App?
要解決這個問題,就要從如何連接多臺手機這個話題說起了。關(guān)于如何連接多臺手機,Airtest的官方文檔可以說是寫的非常模糊。
經(jīng)過我的測試,下面這種方案是最有效的:
-
from airtest.core.api import connect_device
-
device_1 = connect_device('android:///串號1')
-
device_2 = connect_device('android:///串號2')
-
device_3 = connect_device('android:///串號3')
當你這樣連接了3個手機以后,如果直接執(zhí)行 start_app
,那么你會在 串號1
對應(yīng)的手機上啟動App。
此時如果你執(zhí)行下面的代碼,你會發(fā)現(xiàn)返回一個有3個元素的列表:
-
>>> 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>]
這就是你當前連接的三個手機。如果你想控制第二個手機怎么辦呢?使用下面的命令:
-
from airtest.core.api import set_current
-
?
-
set_current(1)
-
start_app('包名')
set_current(1)
里面的1對應(yīng)了列表下標為1的這個手機。也就是第二個加入的手機。
同理,當你想在第三個手機上啟動App時,你需要再切換為 set_current(2)
。
這種方式用起來確實比較麻煩,所以我一般會使用Poco的接口來直接操作每一個手機。所以此時需要把 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:///串號1')
-
device_2 = connect_device('android:///串號2')
-
device_3 = connect_device('android:///串號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()
使用這種方式,就不需要來回切換,并且還可以使用多線程直接同時控制每一臺手機。
?
本文摘自 :https://blog.51cto.com/u