Selenium对Alert弹框的多种处理

发表于:2016-7-06 10:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:乔叶叶    来源:51Testing软件测试网采编

  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");
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号