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

时间:2019-05-10 06:45:41

标签: android cordova appium hybrid-mobile-app webdriver-io

我正在使用webdriver.io为混合Appium应用编写一套Cordova测试。

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

在我的一项测试中,我试图以编程方式接受在WebView顶部启动的应用程序上显示的 Location Permissions native modal

我可以使用browser.alertAccept()在iOS中轻松地做到这一点,但后者似乎不适用于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上的本机警报?

enter image description here

2 个答案:

答案 0 :(得分:1)

  1. 权限对话框是本机对话框,因此您无需切换到Web视图即可将其关闭。
  2. 有一个与允许/拒绝权限按钮关联的Android id,因此您可以使用它代替已使用的标识符。

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

答案 1 :(得分:1)

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);

更多信息: