Selenium / Appium 1.7.2 测试在 Android 5.1 但不是 Android 8.0 上运行
Selenium / Appium 1.7.2 test runs on Android 5.1 but not Android 8.0
如果我使用 Pixel 2 模拟器 运行ning Android
我有一个针对 Android 混合 Web 应用程序的 Selenium/Appium 测试 运行s 42=] 5.1 但在 Pixel 2 模拟器 运行ning Android OS 8.0 上不 运行。我已经尝试了其他 emulator/os 组合,它似乎是 5.1 与以后的任何问题。这似乎也是物理设备上的问题。
这是在本机上下文下的登录屏幕上。
Android Studio 有最新的 SDK 27 和最新的 adv 图像。
Selenium 驱动程序是 3.11.2。
Appium 服务器是 1.7.2(桌面版 1.5.0)。
Appium 日志显示 uiautomator 无法定位元素。但是,我可以使用 ADB 命令来操作元素,而不管我 Android OS 级别是 运行ning。这是 5.1 的驱动程序设置:
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("deviceName", "emulator-5554");
capability.SetCapability("fullReset", "True");
capability.SetCapability("autoWebView", "true");
capability.SetCapability("platformName", "Android");
capability.SetCapability("platformVersion", "5.1"); //ONLY DIFFERENCE
capability.SetCapability("appiumVersion", "1.7.2");
capability.SetCapability("app", "c:/users/user/desktop/myapp.apk");
capability.SetCapability("appWaitActivity", "*");
return new AndroidDriver<AppiumWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capability);
这是 8.0 的驱动程序设置:
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("deviceName", "emulator-5554");
capability.SetCapability("fullReset", "True");
capability.SetCapability("autoWebView", "true");
capability.SetCapability("platformName", "Android");
capability.SetCapability("platformVersion", "8.0"); // ONLY DIFFERENCE
capability.SetCapability("appiumVersion", "1.7.2");
capability.SetCapability("app", "c:/users/user/desktop/myapp.apk");
capability.SetCapability("appWaitActivity", "*");
return new AndroidDriver<AppiumWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capability);
在设置和驱动程序实例化之后,这是适用于 Android 5.1 但不适用于 8.0
的行
Username = _driver.FindElement(By.Id("myapp:id/username"));
我尝试了多种定位器策略,但我不确定我是否正确实施了它们。
奇怪的是,对于任一 OS 版本,测试都可以在登录屏幕之前的 EULA 屏幕上单击接受按钮。
Accept = _driver.FindElement(By.Id("android:id/button1"));
任何指导将不胜感激。
您好将您的代码更新为以下代码:
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("deviceName", "emulator-5554");
capability.SetCapability("fullReset", "True");
capability.SetCapability("autoWebView", "true");
capability.SetCapability("platformName", "Android");
capability.SetCapability("platformVersion", "8.0"); // ONLY DIFFERENCE
capability.SetCapability("appiumVersion", "1.7.2");
capability.SetCapability("app", "c:/users/user/desktop/myapp.apk");
capability.SetCapability("appWaitActivity", "*");
capability.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
return new AndroidDriver<MobileElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capability);
- 您的代码无法找到
元素:第一个是你给的 driver 类型是
AppiumWebElement,所以它只适用于网络元素,因此
将其更改为 MobileElement。
- 第二个是您没有指定 AUTOMATION_NAME 能力。
希望这对你有用。
如果我使用 Pixel 2 模拟器 运行ning Android
我有一个针对 Android 混合 Web 应用程序的 Selenium/Appium 测试 运行s 42=] 5.1 但在 Pixel 2 模拟器 运行ning Android OS 8.0 上不 运行。我已经尝试了其他 emulator/os 组合,它似乎是 5.1 与以后的任何问题。这似乎也是物理设备上的问题。
这是在本机上下文下的登录屏幕上。
Android Studio 有最新的 SDK 27 和最新的 adv 图像。 Selenium 驱动程序是 3.11.2。 Appium 服务器是 1.7.2(桌面版 1.5.0)。
Appium 日志显示 uiautomator 无法定位元素。但是,我可以使用 ADB 命令来操作元素,而不管我 Android OS 级别是 运行ning。这是 5.1 的驱动程序设置:
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("deviceName", "emulator-5554");
capability.SetCapability("fullReset", "True");
capability.SetCapability("autoWebView", "true");
capability.SetCapability("platformName", "Android");
capability.SetCapability("platformVersion", "5.1"); //ONLY DIFFERENCE
capability.SetCapability("appiumVersion", "1.7.2");
capability.SetCapability("app", "c:/users/user/desktop/myapp.apk");
capability.SetCapability("appWaitActivity", "*");
return new AndroidDriver<AppiumWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capability);
这是 8.0 的驱动程序设置:
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("deviceName", "emulator-5554");
capability.SetCapability("fullReset", "True");
capability.SetCapability("autoWebView", "true");
capability.SetCapability("platformName", "Android");
capability.SetCapability("platformVersion", "8.0"); // ONLY DIFFERENCE
capability.SetCapability("appiumVersion", "1.7.2");
capability.SetCapability("app", "c:/users/user/desktop/myapp.apk");
capability.SetCapability("appWaitActivity", "*");
return new AndroidDriver<AppiumWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capability);
在设置和驱动程序实例化之后,这是适用于 Android 5.1 但不适用于 8.0
的行Username = _driver.FindElement(By.Id("myapp:id/username"));
我尝试了多种定位器策略,但我不确定我是否正确实施了它们。
奇怪的是,对于任一 OS 版本,测试都可以在登录屏幕之前的 EULA 屏幕上单击接受按钮。
Accept = _driver.FindElement(By.Id("android:id/button1"));
任何指导将不胜感激。
您好将您的代码更新为以下代码:
DesiredCapabilities capability = new DesiredCapabilities();
capability.SetCapability("deviceName", "emulator-5554");
capability.SetCapability("fullReset", "True");
capability.SetCapability("autoWebView", "true");
capability.SetCapability("platformName", "Android");
capability.SetCapability("platformVersion", "8.0"); // ONLY DIFFERENCE
capability.SetCapability("appiumVersion", "1.7.2");
capability.SetCapability("app", "c:/users/user/desktop/myapp.apk");
capability.SetCapability("appWaitActivity", "*");
capability.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
return new AndroidDriver<MobileElement>(new Uri("http://127.0.0.1:4723/wd/hub"), capability);
- 您的代码无法找到 元素:第一个是你给的 driver 类型是 AppiumWebElement,所以它只适用于网络元素,因此 将其更改为 MobileElement。
- 第二个是您没有指定 AUTOMATION_NAME 能力。
希望这对你有用。