【问题标题】:Selenium / Appium 1.7.2 test runs on Android 5.1 but not Android 8.0Selenium / Appium 1.7.2 测试可在 Android 5.1 上运行,但不能在 Android 8.0 上运行
【发布时间】:2018-10-19 21:16:54
【问题描述】:

如果我使用运行 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 Server 是 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"));

任何指导将不胜感激。

【问题讨论】:

  • Dukeman G 这个问题解决了吗?我也面临同样的问题以及您为解决该问题所做的工作
  • 是的,已解决。我们最终创建了一个查看平台名称和平台版本的小方法。如果 platformName 是 Android 并且 platformVersion => 7.0 使用 UiAutomator2 否则使用 Appium(让 Appium 决定使用哪个自动机)。

标签: android appium appium-android


【解决方案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", "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);
  1. 您的代码无法找到 元素:第一个是您提供的驱动程序类型是 AppiumWebElement,因此它仅适用于 Web 元素,因此 将其更改为 MobileElement。
  2. 第二个是您没有指定 AUTOMATION_NAME 功能。

希望这对你有用。

【讨论】:

  • 面临同样的问题,在包含您的建议后,UIAutomator2 caps.setCapability("deviceName", "S8"); caps.setCapability("udid", udid); caps.setCapability("platformName", "Android"); caps.setCapability("platformVersion", "8.0.0"); caps.setCapability("appPackage", appPackage); caps.setCapability("appActivity", appActivity); caps.setCapability("noReset", "false"); caps.setCapability("automationName","UIAutomator2"); caps.setCapability("appWaitActivity", appActivity); driver = new AndroidDriver(new URL("0.0.0.0:4723/wd/hub"), caps);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2021-11-17
  • 2015-07-10
相关资源
最近更新 更多