起因:最近自做一个UI自动化注册的事情,在使用 WebDriver 的过程中遇到了页面元素可能不存在的问题,因为元素不存在,再执行元素的相关操作的时候就会超时等待和抛出异常,所以为了处理不存在,就是用了 try / catch 的方式处理了一下,如果 try 中的不存在,那就执行 catch 中的代码逻辑。
try {
driver.findElement(By.id("element_a")).click();
} catch (NoSuchElementException e) {
driver.findElement(By.id("element_b")).click();
}
上面的代码存在的问题:
1、
代码不美观
2、使用 try / catch 时如果元素不存在,等待的时间很长,大约需要30秒,这样的速度实在是影响效率
思考:
真的只有使用try / catch 唯一可能的方式?
解决办法:
可以使用
driver.findElements( By.id("element") ).size() != 0
来判断元素是否存在,可以避免 try / catch,提高代码执行效率
// 设置超时等待为0毫秒
driver.manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS);
boolean elementExists;
// 利用seiz()方法来判断元素是否存在
elementExists = driver.findElements( By.id("element_a") ).size() != 0;
if(elementExists){
driver.findElement(By.id("element_a")).click();
}else{
driver.findElement(By.id("element_b")).click();
}
// 重新设置默认的超时等待时间
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
网友评论