【问题标题】:Unable to Accept/Deny the location permission popup on Android devices while executing the scripts on Amazon Device Farm在 Amazon Device Farm 上执行脚本时,无法接受/拒绝 Android 设备上的位置权限弹出窗口
【发布时间】:2019-10-13 22:18:50
【问题描述】:

link of location popup image 我正在尝试在 Amazon DeviceFarm 上执行自动化脚本(Appium+Java+TestNG/Junit),但在执行时,脚本无法在位置权限弹出窗口上执行任何操作((访问/拒绝)。Couldn'在控制台中看不到任何错误日志。我使用了正常的 click() 操作以及 alert() 函数。在这种情况下没有任何作用。

请帮助我。下面是我尝试过的一段代码..

        WebDriverWait wait = new WebDriverWait(android, 5);
        wait.until(ExpectedConditions.alertIsPresent());
        driver.switchTo().alert().dismiss();
        }catch(Throwable t) {
            System.out.println("Not an alert popup or alert is not present..");
            driver.findElement(By.id("idofthelocator")).click();
        }

【问题讨论】:

    标签: cucumber appium aws-device-farm


    【解决方案1】:

    使用 Android Appium 测试,应该可以通过将功能 autoGrantPermission 设置为 true 来关闭权限弹出窗口。此功能将评估应用程序所需的权限,并运行 adb 命令以授予应用程序访问权限。这是 Appium 项目中的代码:

    https://github.com/appium/appium-android-driver/blob/959e07d84dc9d09a11735872259ac87511d03b85/lib/android-helpers.js#L334

    https://github.com/appium/appium-adb/blob/e6bdc234e7dcf61e0252aad3ac7ab47491fe3720/lib/tools/adb-commands.js#L186

    您能试试这个功能并告诉我们是否有帮助吗?

    在 iOS Appium 测试中,autoGrantPermission 功能不适用于低于 1.9.1 的 Appium 版本,因为 Apple API 无法预测必要的权限或接受它们。一种解决方法是通过打印页面源并动态检查它来手动查找元素,或者使用以下行来利用 selenium 方法:

    driver.switchTo().alert().accept();
    driver.switchTo().alert().dismiss();
    

    在更新的 Appium 版本中,对使用适用于 iOS 测试的 autoGrantPermission 功能进行了更改。这是该请求的 PR

    https://github.com/appium/appium-xcuitest-driver/commit/f5267acab3bc9285161397fa19a8daf60ae0c6ae

    您能否让我们知道您在这种情况下使用的是哪个 Appium 版本,并提供一些来自 Device Farm 中运行和本地执行的 Appium 服务器日志?

    【讨论】:

    • 嘿@jmp,感谢您的回复.. 我已经尝试使用该功能cap.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, "true"); 但它不起作用.. 我不知道如何解决这个问题.. 我将通过再次执行相同的脚本来共享日志..
    • 有什么更新吗?如果我的回答有帮助,请将其标记为正确
    • 嘿抱歉@jmp 回复延迟,我添加了位置弹出图像(以链接的形式)..有时关闭 devicefarm 上的 GPS 工作但并非总是..它工作了两次满分 10 .. 如果我们通过关闭设备来启动设备,它不会显示位置权限弹出窗口,但这不适用于每次执行..
    • 不用担心,它肯定会弹出一些权限。能否顺便分享一下appium服务器日志?
    • 能力 autograntpermissions 应该在那里工作。如果有错误,appium 服务器日志应该会显示错误。
    【解决方案2】:

    不幸的是,cap.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, "true"); 也不适用于我。所以,我试着像往常一样找到弹出窗口的定位器,然后点击它,它就像一个魅力。您是否也可以尝试查找定位器并根据需要单击按钮。下面的代码适用于我的情况:

    `//Location service pop up
    @FindBy(id ="com.android.packageinstaller:id/dialog_container")
    public WebElement locationPopup;
    
    //Location service allow button
    @FindBy(id = "com.android.packageinstaller:id/permission_allow_button")
    public WebElement locationPopupAllowButton;
    
    WebDriverWait wait = new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.visibilityOf(locationPopup));
    locationPopupAllowButton.click();`
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多