android - Selenium / Appium 1.7.2 测试可在 Android 5.1 上运行,但不能在 Android 8.0 上运行
问题描述
如果我使用运行 Android OS 5.1 的 Pixel 2 模拟器但不在运行 Android OS 8.0 的 Pixel 2 模拟器上运行,我对 Android Hybrid Web 应用程序进行了 Selenium/Appium 测试。我已经尝试过其他模拟器/操作系统组合,它似乎是 5.1 与以后的任何问题。这似乎也是物理设备上的一个问题。
这在本机上下文下的登录屏幕上。
Android Studio 具有最新的 SDK 27 和最新的广告图像。Selenium 驱动程序是 3.11.2。Appium 服务器是 1.7.2(桌面 1.5.0)。
Appium 日志显示 uiautomator 未能找到元素。但是,无论我正在运行的 Android 操作系统级别如何,我都可以使用 ADB 命令来操作元素。这是 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"));
我尝试了多种定位器策略,但我不确定我是否正确实施了它们。
奇怪的是,对于任一操作系统版本,测试都可以单击登录屏幕之前的 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);
- 您的代码找不到元素可能有几个原因:第一个是您提供的驱动程序类型是 AppiumWebElement,因此它仅适用于 Web 元素,因此将其更改为 MobileElement。
- 第二个是您没有指定 AUTOMATION_NAME 功能。
希望这对你有用。
推荐阅读
- sql - SQL - 如何获取本月至今的交易计数
- java - 字符串数组返回空值
- mysql - 错误数据库:40 - java.sql.SQLNonTransientConnectionException
- aspectj - Spring Application中的编译时间编织无法正常工作
- javascript - 如何对数组对象进行排序并操作它们以返回一个新的二维数组?
- list - 如何在 typeahead 颤动中做建议回调?
- python - 使用 Python / Pandas 为特定列值添加/复制行
- ruby-on-rails - Minitest中“def setup”和“setup do”之间的区别?
- autocomplete - 与 Geocoder API 相比,HERE Geocoder Autocomplete API 缺少结果
- angular - 通过浏览器中的地址栏重定向 Angular 应用程序中出现错误 404