[Selendroid] [Java-Client]:在特定设备/模拟器上运行脚本

时间:2016-03-16 07:11:49

标签: android selenium-webdriver selendroid

我在我的机器中配置了两个android设备。一个是真正的Android设备(ZX1D63R33N)[Moto G第二代 - 使用5.0.2 - API 21]和GenyMotion android模拟器[使用带有API 22的5.1.1]。

脚本在两个设备中成功执行。但我无法控制我应该执行哪个设备的执行。

考虑我先连接我的真实Android设备然后再启动Genymotion模拟器。然后adb设备将提供以下输出。

C:\Users\Ramkumar>adb devices
List of devices attached
ZX1D63R33N      device
192.168.56.101:5555     device 

我在我的脚本中设置了以下SelendoidCapabilities。

    WebDriver driver;   //AppiumDriver driver

    //new SelendroidCapabilities.
    SelendroidCapabilities selendroidCapabilities = SelendroidCapabilities.emulator(DeviceTargetPlatform.ANDROID22, "Android Emulator");
    selendroidCapabilities.setEmulator(true);
    selendroidCapabilities.setCapability("browserName", "Chrome");
    selendroidCapabilities.setCapability("device", "Android");
    selendroidCapabilities.setCapability("version", "5.1");
    selendroidCapabilities.setCapability("deviceName", "192.168.56.101:5555");
    selendroidCapabilities.setCapability("platformName", "Android");

    //capabilities.setCapability("app", app.getAbsolutePath());
    //capabilities.setCapability("appPackage","com.android.chrome");
    driver = new SelendroidDriver(new URL("http://localhost:4723/wd/hub"), selendroidCapabilities);
    driver.get("https:google.com");
    Thread.sleep(20000);
    driver.quit();

当我执行脚本时,它会在手机中执行。它会打开Chrome浏览器并打开谷歌页面。无论我将模拟器设置为true并使用emualtor创建了SelendroidCapabilities作为选项。

即使我关闭了我的GenyMotion emualtor并且连接了真正的Android设备,adb设备命令也只显示一个连接的真实设备。然后我也看到它在真正的Android设备中执行

C:\Users\Ramkumar>adb devices
List of devices attached
ZX1D63R33N      device

反之亦然。如果我先启动一个真实的设备,然后再启动GenyMotion emualtor,那么adb device命令会将输出设为

C:\Users\Ramkumar>adb devices
List of devices attached
ZX1D63R33N      device
192.168.56.101:5555     device

拥有以下SelendroidCapabilities并不是在真正的Android设备上运行脚本,而是在GenyMotion emualtor上运行。

    SelendroidCapabilities selendroidCapabilities = SelendroidCapabilities.device(DeviceTargetPlatform.ANDROID22, "Android Emulator");
    selendroidCapabilities.setEmulator(false);

请建议我是否缺少任何配置。 提前谢谢。

此致 Ramkumar

2 个答案:

答案 0 :(得分:0)

    1. Use this: SelendroidCapabilities caps = new SelendroidCapabilities(); 
        in place of this:    
     SelendroidCapabilities selendroidCapabilities = SelendroidCapabilities.emulator(DeviceTargetPlatform.ANDROID22, "Android Emulator");

    2. Use capability caps.setSerial(deviceId) 
        in place of 
      selendroidCapabilities.setCapability("deviceName", "192.168.56.101:5555"); 

deviceId与执行adb设备时获得的设备序列号相同,您可以通过此输出来控制执行测试的位置。

答案 1 :(得分:0)

最后,我能够执行特定于设备的运行。我在旧代码中只缺少的是我将设备设置为deviceName属性而不是udid。

onResume()

为此,我必须使用udid设置序列号。

C:\Users\Ramkumar>adb devices
List of devices attached
192.168.56.101:5555     device
ZX1D63R33N      device

capabilities.setCapability(" udid"," ZX1D63R33N"); - 这是设置设备ID的属性。当我将值设置为ZX1D63R33N时,它在我的真实Android设备上运行,当设置为192.168.56.101:5555时,它在模拟器上执行。

当deviceName是必需的时,我尝试使用该值设置序列号。我们在deviceName中设置的值

并不重要

谢谢!