我无法检测本机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;
}
但是当我运行测试时,以上都没有工作,有时它会被卡住验证。任何帮助将不胜感激。
答案 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();
}
}
这可能不是处理这种情况的最佳方式,所以如果有人知道更好的方法,请通知我们。