如何使用Appium服务器(1.0.1)和Android SDK处理Android Web应用程序中的警报?
以下代码无法在android上运行:
driver.switchTo().accept().alert();
错误讯息:
> -modal window does not get closed
答案 0 :(得分:3)
最好的方法是使用appium检查器。单击元素并从中复制 resource-id 。在 findElement(By.id())方法中使用此资源ID。
对我来说资源ID:android:id / button1
((AndroidDriver) driver).findElement(By.id("android:id/button1")).click();
这适用于Android。对于常规使用,您可以使用
driver.findElement(By.id("android:id/button1")).click();
答案 1 :(得分:2)
您需要在尝试接受之前获取警报
这是Appium Java Client Tests的一些代码:
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.accept();
这应该在大部分时间都有效。
如果accept()
无效,请将driver.switchTo().alert();
和alert.accept();
替换为代码以找到该按钮,然后点击该按钮。
如果它没有在try / retry块中找到按钮换行findElementBy(Method)
代码,那么然后点击它。
答案 2 :(得分:1)
某些提醒可能是原生Android的提醒,不是由浏览器生成的。在这种情况下,以下代码:
Alert alert = driver.switchTo().alert(); alert.accept();
可能会抛出:
WebDriverException: unknown error: unhandled inspector error: {"code":-32603,"message":"No JavaScript dialog to handle"}
要处理此类警报,只需切换到本机应用程序上下文,执行必要的操作,然后切换回浏览器:
AppiumDriver<WebElement> appiumDriver = (AppiumDriver<WebElement>) webDriver;
String currentContext = appiumDriver.getContext();
appiumDriver.context("NATIVE_APP");
// actions within the alert
appiumDriver.findElements(By.xpath(OK_BUTTON_LOCATOR)).click(); // put locator instead of OK_BUTTON_LOCATOR
appiumDriver.context(currentContext);
// continue working
答案 3 :(得分:1)
WebElement btn = driver.findElement(By.xpath("//android.widget.Button[@content-desc='OK']"));
TouchAction act = new TouchAction(driver);
act.tap(241,320).perform();
(241,320)这些是X&amp; Y c警告的纵坐标 这项工作非常适合我
答案 4 :(得分:0)
Appium附带默认功能,可以接受,解除警报
capabilities.SetCapability("autoAcceptAlerts", true);
capabilities.SetCapability("autoDismissAlerts", true);
答案 5 :(得分:0)
请使用以下代码,在单击“确定”按钮之前添加一些等待。 之后通过你的xpath OK按钮。
synchronized (driver)
{
driver.wait(2000);
}
driver.context(NATIVE_APP);
driver.findElementByXPath{("//android.widget.Button[@resourceid=
‘android:id/button1’]").click();
答案 6 :(得分:0)
如果警报显示在Ui上,则需要等待更多时间显示..我们可以使用流畅的等待代替。
答案 7 :(得分:0)
因此,对此的更新答案是:AlertDialog是系统级元素,因此,单击接受按钮时应使用:
androidDriver.findElementById("android:id/button1").click()
否则要取消操作:
androidDriver.findElementById("android:id/button2").click()
答案 8 :(得分:0)
//第一次检查警报是否存在
public boolean isAlertPresent() {
try {
mobDriver.switchTo().alert();
log.info("ALERT IS PRESENT !! ");
return true;
} catch (Exception e) {
log.info("ALERT IS NOT PRESENT !! ");
return false;
}
}
public void mobileAlertHandle() {
if (isAlertPresent()) {
Alert alert = mobDriver.switchTo().alert();
alert.accept();
}
}
如果这不起作用,请检查您的元素并尝试使用ID或名称
例如:mobDriver.findElementById(“ android:id / button2”)。click()