当我打开网络应用程序时,我正在弹出一个 . 我试图以两种方式点击“允许”按钮:
1)当我添加权限时:
caps.setCapability("autoGrantPermissions", true);
caps.setCapability("autoAcceptAlerts", true);
......
driver.switchTo().alert().accept();
什么都没发生((
2)当我试图通过XPath找到它时:
driver.findElement(By.xpath("//android.widget.Button[@text='Allow']")).click();
我收到一个错误:
Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//android.widget.Button[@text='Allow']"}
这是来自UI Automator Viewer的截图:
我发现这篇文章:Unable to tap the link after tap on Allow button of permission alert in Appium?但它没有帮助我 .
3 回答
第一: capabilities 你试图用 IOS only
在Android上你必须通过
findElement
找到弹出窗口并自己关闭它们 .第二:自从你为 web application 开始Appium会话之后,在搜索原生弹出窗口之前你 must switch the context :
不要忘记将上下文切换回web以继续:
我有类似自己的问题,这是我如何解决这个问题:
这是来自我的页面对象的代码的一部分,当点击useGPS时,显示本机Android通知允许或阻止GPS使用,
这是一个覆盖类
Alert
,忽略屏幕扩展,只需尝试使用现有Alert(org.openqa.selenium.Alert包)的实现 .
我知道这不是解决方案1:1您必须调整它,以便合并到您的代码中,但重点是尝试覆盖Alert并等待元素出现,并与之交互 .
希望这会对你有所帮助,
尝试设置这样的功能:
如果它没有用,请尝试使用此xPath找到“ALLOW”按钮:
要么
要么
要么
您也可以尝试通过在浏览器中打开您的应用程序来找到此按钮,然后在开发工具中找到此按钮的选择器并在Appium中使用它 .
PS:在你的代码中添加一个
WebDriverWait
:这将等待至少10秒,直到该元素可被点击 . 有时脚本非常快,当时
DOM
不包含您想要与之交互的元素 . 所以你必须等待一段时间才能将元素放在DOM
中 . 这就是在脚本中添加wait非常有用的原因 .对于
WebDriverWait
,您必须添加一些导入: