如何使用appium处理android中的警报

时间:2014-07-08 15:07:45

标签: android alert appium

如何使用Appium服务器(1.0.1)和Android SDK处理Android Web应用程序中的警报?

以下代码无法在android上运行:

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

错误讯息:

> -modal window does not get closed

9 个答案:

答案 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()