从appium命令

时间:2015-12-17 09:05:50

标签: android testing adb appium genymotion

我正在使用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匹配,所以没有运气。

有没有人有这个问题的解决方案/解决方法?

1 个答案:

答案 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”。