【问题标题】:How to handle Android permission Dialogues using Appium C#如何使用 Appium C# 处理 Android 权限对话
【发布时间】:2019-10-02 13:21:17
【问题描述】:

我正在使用带有 C# 客户端的 Appium。

在启动 Android 应用时,我会看到几个类似这样的权限对话框。

我想点击“允许”或“拒绝”按钮,但使用下面的代码无法做到。

var Allow_Btn = driver.FindElementById("permission_allow_button");
Allow_Btn.Click();

经过大量谷歌搜索,我发现我们可以使用以下功能跳过这些权限。

Capability.SetCapability("autoGrantPermissions", "true");

但我想知道是否有其他方法可以做到这一点。

提前致谢。

【问题讨论】:

    标签: c# android selenium-webdriver appium


    【解决方案1】:

    您只能通过 Xpath 定位器来完成。按 id 查找不适用于权限对话处理。 要找到“允许”按钮,您可以使用

    driver.find_element_by_xpath("//*[@class='android.widget.Button'][2]") //it denotes "Allow" button
    

    对于“拒绝”按钮,

    driver.find_element_by_xpath("//*[@class='android.widget.Button'][1]") //it denotes "Deny" button
    

    在你点击按钮之前你应该等到元素被定位

    WebDriverWait wait = new WebDriverWait(driver, timeOut);                
    wait.until(ExpectedConditions.presenceOfElementLocated(element));
    

    希望这会对你有所帮助。

    【讨论】:

    • 感谢 Mohanraj 的回复。您能否在 apkpure.com/raaga/net.amp.raaga/download?from=details 试用此应用程序。让我知道它是否适合您,因为以下技术都不适合我。 driver.FindElement(new ByAndroidUIAutomator("text(\"ALLOW\")")).Click(); driver.FindElementById("com.android.packageinstaller:id/permission_allow_button"); driver.FindElementByXPath("//*[@class='android.widget.Button'][2]").Click();
    • @Abhi3106 我在我的应用程序中使用了它,并且按预期工作并且很好。
    • 您是否介意尝试一下该应用并分享您的结果。这会很有帮助。谢谢。
    【解决方案2】:

    我不知道你从哪里得到这个permission_allow_button ID,我认为定位器不正确。

    这是我在Android Device Monitor application 中的样子

    因此,如果您仍想使用strategy of finding the element by ID - 您应该使用com.android.packageinstaller:id/permission_allow_button ID。

    另一个选项是XPath selectors,比如:

    • //Button[@text()='ALLOW]
    • //Button[@resource-id='com.android.packageinstaller:id/permission_allow_button']

    【讨论】:

    • 我通常以这种方式使用 ID,并且每次都有效。下面是我用来测试的应用程序。 apkpure.com/raaga/net.amp.raaga/download?from=details 以下技术无效。 driver.FindElement(new ByAndroidUIAutomator("text(\"ALLOW\")")).Click(); driver.FindElementById("com.android.packageinstaller:id/permission_allow_button"); driver.FindElementByXPath("//*[@class='android.widget.Button'][2]").Click();
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2014-08-29
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多