Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法。
明确知道系统哪个地方会弹alert
常规处理,该方法只是对弹出的alert弹框进行了捕获和处理
@Test(enabled=false)
publicvoidff1(){
System.setProperty(key,value);
driver=newChromeDriver();
driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
driver.findElement(By.xpath("//*[@id='alert']/input")).click();
Alertalt=driver.switchTo().alert();
alt.accept();
}
捕获时增加智能等待,该方法对弹出的alert弹框进行智能等待,避免了NoAlertPresentException异常的抛出
@Test(enabled = false)
public void ff2() {
System.setProperty(key, value);
driver = new ChromeDriver();
driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
driver.findElement(By.xpath("//*[@id='alert']/input")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
try {
Alert alert = wait.until(new ExpectedCondition<Alert>() {
@Override
public Alert apply(WebDriver driver) {
try {
return driver.switchTo().alert();
} catch (NoAlertPresentException e) {
return null;
}
}
});
alert.accept();
} catch (NullPointerException e) {
/* Ignore */
System.out.println("ff2 nullpoint");
}
}
捕获和处理alert时都增加判断,使用selenium自带的ExpectedConditions
@Test(enabled = false)
public void ff3() {
System.setProperty(key, value);
driver = new ChromeDriver();
driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
driver.findElement(By.xpath("//*[@id='alert']/input")).click();
boolean flag = false;
Alert alert = null;
try {
new WebDriverWait(driver, 10).until(ExpectedConditions
.alertIsPresent());
alert = driver.switchTo().alert();
flag = true;
// alert.accept();
} catch (NoAlertPresentException NofindAlert) {
// TODO: handle exception
NofindAlert.printStackTrace();
// throw NofindAlert;
}
if (flag) {
alert.accept();
}
}
以上的几种方法都是自己知道哪个地方要弹alert,所以在代码的某处对alert进行捕获,但是有时候我们并不知道哪个地方会弹alert弹框,这样会导致我们没有进行捕获代码抛出了
UnexpectedAlertBehaviour异常,下面我们来看下怎么解决这个问题。
不清楚系统哪个地方会弹alert
对整个正常代码进行异常捕获,写进try里,然后catchUnexpectedAlertBehaviour
@Test(enabled = false)
public void ff4() {
System.setProperty(key, value);
driver = new ChromeDriver();
driver.get("file:///Users/user/Documents/qiaojiafei/seleniumtest.html");
driver.findElement(By.xpath("//*[@id='alert']/input")).click();
try {
System.out.println("ff4正常处理代码1");
driver.findElement(By.xpath("//*[@id='alert']/input")).click();
} catch (UnhandledAlertException e) {
// TODO: handle exception
driver.switchTo().alert().accept();
System.out.println("ff4进入UnhandledAlertException异常");
}
System.out.println("ff4正常处理代码2");
}