我正在使用Appium进行Android测试,使用Genymotion模拟器。我有几个模拟器,我正在尝试做的是构建一个脚本,在每个模拟器上一个接一个地(并行)测试我的应用程序。该脚本启动一个模拟器,在其上测试应用程序,然后将其关闭。
为此,我需要在每次迭代时使用特定的设备标识符提供appium
命令(这是至关重要的,因为在任何给定时间都有多个模拟器在运行):
appium --udid XXXXXXXX
然后Appium使用-s XXXXXXXX
参数运行adb。
问题是Genymotion模拟器不显示udid序列号,而是在运行adb时,我看到在启动时分配给设备的地址:端口,这些不能用于自动化,因为它们是不可预测的。
我发现adb可以使用udid以外的参数调用特定设备,方法是指定要使用的属性。这样,我需要做的就是使用模拟器的模型,一切都应该有效:
adb -s model:Google_Nexus_4___4_4_4___API_19___768x1280
但是,当我尝试将其合并到Appium中时:
appium --udid model:Google_Nexus_4___4_4_4___API_19___768x1280
我收到以下错误:
[36minfo[39m: Retrieving device
[36minfo[39m: [debug] Trying to find a connected android device
[36minfo[39m: [debug] Getting connected devices...
[36minfo[39m: [debug] executing cmd: /Users/mor/Library/Android/sdk/platform-tools/adb devices
[36minfo[39m: [debug] 2 device(s) connected
[36minfo[39m: [debug] Sent shutdown command, waiting for UiAutomator to stop...
[33mwarn[39m: UiAutomator did not shut down fast enough, calling it gone
[36minfo[39m: [debug] Cleaning up android objects
[36minfo[39m: [debug] Cleaning up appium session
[36minfo[39m: [debug] Error: Device model:Google_Nexus_4___4_4_4___API_19___768x1280 was not in the list of connected devices
这显然意味着Appium首先运行adb devices
,然后才尝试将udid与参数中给出的udid匹配,所以没有运气。
有没有人有这个问题的解决方案/解决方法?
答案 0 :(得分:1)
您应该可以使用adb获取udid
adb -s model:Google_Nexus_4___4_4_4___API_19___768x1280 shell settings get secure android_id
然后将其交给appium。
如果你需要将它传递给命令行(并且你有一个bash shell),你可以使用xargs
adb -s model:Google_Nexus_4___4_4_4___API_19___768x1280 shell settings get secure android_id | xargs -I myudid appium --udid myudid
从问题中的更多细节编辑:
adb devices | grep `adb -s model:Google_Nexus_4___4_4_4___API_19___768x1280 shell ip route | cut -d" " -f1 | cut -d"/" -f1` | sed "1 d" | cut -f 1 | xargs -I ip appium --udid ip
问题作者编辑:
在Genymotion设备上使用adb -s model:Google_Nexus_4___4_4_4___API_19___768x1280 shell ip route
时,结果如下所示:
default via 10.0.3.2 dev eth1
default via 10.0.3.2 dev eth1 metric 205
10.0.3.0/24 dev eth1 scope link
10.0.3.0/24 dev eth1 proto kernel scope link src 10.0.3.15 metric 205
10.0.3.2 dev eth1 scope link
192.168.56.0/24 dev eth0 proto kernel scope link src 192.168.56.101
我的工作命令:
adb -s model:Google_Nexus_4___4_4_4___API_19___768x1280 shell ip route | grep "eth0" | rev | cut -d" " -f2 | rev | cut -d" " -f1
据我所知,端口总是默认为5555,所以这样我得到了地址,可以为appium命令构建我自己的“udid”。