當(dāng)前位置:首頁 > IT技術(shù) > 移動(dòng)平臺(tái) > 正文

一日一技:Airtest連接多個(gè)手機(jī)的時(shí)候,如何start_app?
2021-09-17 16:40:30

一日一技:Airtest連接多個(gè)手機(jī)的時(shí)候,如何start_app?_android

我們在看Airtest的文檔時(shí),肯定會(huì)發(fā)現(xiàn)它有這樣一段代碼:

一日一技:Airtest連接多個(gè)手機(jī)的時(shí)候,如何start_app?_f5_02

方框中的這一段代碼的意思是,通過包名來啟動(dòng)一個(gè)App。

當(dāng)你電腦只連接了1臺(tái)手機(jī)的時(shí)候,這樣做是沒有問題的,但是你有沒有考慮過,如果你電腦里面連接了很多臺(tái)手機(jī),那么你直接這樣沒頭沒尾的 start_app啟動(dòng)一個(gè)App,你啟動(dòng)的是哪個(gè)手機(jī)上的App?

要解決這個(gè)問題,就要從如何連接多臺(tái)手機(jī)這個(gè)話題說起了。關(guān)于如何連接多臺(tái)手機(jī),Airtest的官方文檔可以說是寫的非常模糊。

經(jīng)過我的測試,下面這種方案是最有效的:

  1. from airtest.core.api import connect_device

  2. device_1 = connect_device('android:///串號1')

  3. device_2 = connect_device('android:///串號2')

  4. device_3 = connect_device('android:///串號3')

當(dāng)你這樣連接了3個(gè)手機(jī)以后,如果直接執(zhí)行 start_app,那么你會(huì)在 串號1對應(yīng)的手機(jī)上啟動(dòng)App。

此時(shí)如果你執(zhí)行下面的代碼,你會(huì)發(fā)現(xiàn)返回一個(gè)有3個(gè)元素的列表:

  1. >>> from airtest.core.api import G

  2. >>> G.DEVICE_LIST

  3. [<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ī)怎么辦呢?使用下面的命令:

  1. from airtest.core.api import set_current

  2. ?

  3. set_current(1)

  4. start_app('包名')

set_current(1)里面的1對應(yīng)了列表下標(biāo)為1的這個(gè)手機(jī)。也就是第二個(gè)加入的手機(jī)。

同理,當(dāng)你想在第三個(gè)手機(jī)上啟動(dòng)App時(shí),你需要再切換為 set_current(2)。

這種方式用起來確實(shí)比較麻煩,所以我一般會(huì)使用Poco的接口來直接操作每一個(gè)手機(jī)。所以此時(shí)需要把 device_1, device_2device_3作為參數(shù)傳入給 AndroidUiautomationPoco,代碼如下:

  1. from airtest.core.api import connect_device

  2. from poco.drivers.android.uiautomation import AndroidUiautomationPoco

  3. ?

  4. ?

  5. device_1 = connect_device('android:///串號1')

  6. device_2 = connect_device('android:///串號2')

  7. device_3 = connect_device('android:///串號3')

  8. ?

  9. poco_1 = AndroidUiautomationPoco(device_1, use_airtest_input=True, screenshot_each_action=False)

  10. poco_2 = AndroidUiautomationPoco(device_2, use_airtest_input=True, screenshot_each_action=False)

  11. poco_3 = AndroidUiautomationPoco(device_3, use_airtest_input=True, screenshot_each_action=False)

  12. ?

  13. poco_1(text='微信').click()

  14. poco_2(text='微信').click()

  15. poco_3(text='微信').click()

使用這種方式,就不需要來回切換,并且還可以使用多線程直接同時(shí)控制每一臺(tái)手機(jī)。

?

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >