Selendroid检查是否显示弹出错误

时间:2014-10-15 18:23:42

标签: java webdriver selendroid

我无法检测本机Android应用上是否显示弹出窗口。方案如下:

我开始购票并开始添加产品,但有时当我添加产品时,我会收到一条错误消息,说我无法添加该产品(这是正确的)。问题是,每次我尝试添加产品时,我都需要检查是否显示错误。这是迄今为止我尝试过的事情:

private boolean checkErrorInesperado() {
    try {
        //clicks on desired element
        utils.click(EMicroposVentanasErrores.BOTON_ACEPTAR);
        return true;
    } catch (NoSuchElementException ex) {
        //do nothing it's expected
        return false;
    }
}

private boolean isElementPresent() {
    return (driver.findElements(By.id("foo")).size() > 0) ? true : false;
}

但是当我运行测试时,以上都没有工作,有时它会被卡住验证。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不确定我是否确切地知道您的问题是什么,因为您询问是否显示弹出错误,但是您似乎正在测试NoSuchElementException,这不应该导致弹出首先是(因为它是Java程序中的错误而不是浏览器)。如果你真的需要测试弹出式警告,这对我有用:

private Alert getAlert() {
    return ExpectedConditions.alertIsPresent().apply(driver);
}

此方法返回警报,"驱动程序"这里指的是WebDriver接口的实现方式与您在示例中执行的方式相同。

您可以使用以下方法查看是否已引发警报:

private boolean isAlertPresent() {
    return ExpectedConditions.alertIsPresent().apply(driver) != null;
}

以下方法在传递警报时(例如来自上面显示的第一种方法)将返回警报的消息:

private String getAlertText(Alert alert) {
    return alert.getText();
}

但是,有时只是命令Selenium点击它认为不存在的对象会导致它在记录警报之前引发异常。如果您遇到这个问题,那么下面的内容似乎是一个混乱的解决方案,但它对我有用:

private void clickAndCheckAlerts() {
    try {

        // (put code for clicking a component here)

        // Optionally you may want make the thread sleep for a little while
        // since alerts may not pop up immediately
        Thread.sleep(SLEEP_TIME);

    } catch (UnhandledAlertException e) {
        // Make the following method check for alerts and log their text
        checkForAlertsAndLogAlertText();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这可能不是处理这种情况的最佳方式,所以如果有人知道更好的方法,请通知我们。