WebDriver 中如何检查一个元素是否存在?

起因:最近自做一个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);

你可能感兴趣的:(WebDriver 中如何检查一个元素是否存在?)