Appium/wdio - 无法关闭 Android 上的位置权限警报

Appium/wdio - unable to dismiss location permissions alert on Android

我正在使用 webdriver.io to write a suite of Appium tests for a hybrid Cordova 应用程序。

"appium": "^1.10.0",
"wdio-appium-service": "^0.2.3",
"wdio-jasmine-framework": "^0.3.8",
"webdriverio": "^4.14.1",

在我的一个测试中我正在尝试以编程方式接受位置权限本机模式 出现在 WebView 之上的 App 启动上。

我可以在 iOS 中使用 browser.alertAccept() 轻松做到这一点,但后者似乎不适用于 Android。

我也尝试切换到本机上下文以关闭它,但没有成功。

function dismissLocationPermissions() {
  if (browser.isAndroid) {
    new WebView().switchToContext(0);
    browser.pause(2000);
    const ANDROID_ACCEPT_ALERT_SELECTOR = "//*[@class='android.widget.Button'][2]";
    // OR '*//android.widget.Button[@text="ALLOW"]' ?
    $(ANDROID_ACCEPT_ALERT_SELECTOR).click();
    WebView().switchToContext(1);
  } else {
    browser.alertAccept();
  }
}

如何使用 wdio 关闭 Android 上的本机警报?

  1. 权限对话框是原生的,所以你不需要切换到 webview 来关闭它。
  2. 有一个 android id 与 allow/deny 权限按钮关联,因此您可以使用它来代替您使用的标识符。

allow 按钮的 id 是:com.android.packageinstaller:id/permission_allow_button .
deny 按钮的 id 是:com.android.packageinstaller:id/permission_deny_button

autoGrantPermissions DesiredCapability,如果你设置为true - Appium会自动判断你的应用程序需要哪些权限,并在安装过程中授予应用程序.

该功能默认设置为 false,因此您需要明确设置为:

DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability(MobileCapabilityType.NO_RESET, false);
dc.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, true);
driver = new AndroidDriver<>(url, dc);

更多信息: