在Selenium WebDriver(selenium 2)中使用Java进行警报处理
我想检测是否popup警报。 目前我正在使用下面的代码:
try { Alert alert = webDriver.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); // alert handling log().info("Alert detected: {}" + alert.getText()); alert.accept(); } catch (Exception e) { }
问题是,如果网页的当前状态没有提示,它会等待特定的时间,直到达到超时,然后抛出exception,因此性能非常糟糕。
有没有更好的方法,可能是一个警报事件处理程序,我可以使用dynamic发生警报?
这是什么对我使用显式等待从这里WebDriver:先进的使用
public void checkAlert() { try { WebDriverWait wait = new WebDriverWait(driver, 2); wait.until(ExpectedConditions.alertIsPresent()); Alert alert = driver.switchTo().alert(); alert.accept(); } catch (Exception e) { //exception handling } }
写下面的方法:
public boolean isAlertPresent() { try { driver.switchTo().alert(); return true; } // try catch (Exception e) { return false; } // catch }
现在,您可以使用上面写的方法来检查警报是否存在:
if (isAlertPresent()) { driver.switchTo().alert(); driver.switchTo().alert().accept(); driver.switchTo().defaultContent(); }
try { //Handle the alert pop-up using seithTO alert statement Alert alert = driver.switchTo().alert(); //Print alert is present System.out.println("Alert is present"); //get the message which is present on pop-up String message = alert.getText(); //print the pop-up message System.out.println(message); alert.sendKeys(""); //Click on OK button on pop-up alert.accept(); } catch (NoAlertPresentException e) { //if alert is not present print message System.out.println("alert is not present"); }
Alert alert = driver.switchTo()。alert(); alert.accept();
您也可以拒绝提示框:
Alert alert = driver.switchTo()。alert(); 警报()驳回();
你可以试试
try{ if(webDriver.switchTo().alert() != null){ Alert alert = webDriver.switchTo().alert(); alert.getText(); //etc. } }catch(Exception e){}
如果这不起作用,你可以尝试循环所有的窗口句柄,看看是否存在警报。 我不确定警报是否会以使用selenium的新窗口打开。
for(String s: webDriver.getWindowHandles()){ //see if alert exists here. }