Selenium Java使用含文本匹配XPath定位元素的If判断实现问题
问题说明
你需要通过文本匹配规则使用XPath定位元素,根据元素是否存在输出对应提示,现有运行异常的代码如下:
if driver.find_element_by_xpath("//*[contains(text(),'addFromWishlist')]").isEmpty() { System.out.println("In stock"); } else{ System.out.println("Not In Stock"); }
错误原因
find_element_by_xpath方法在未匹配到对应元素时,会直接抛出NoSuchElementException异常,不会返回元素对象供你调用isEmpty方法- Selenium的单个WebElement实例没有
isEmpty方法,该调用会直接触发编译错误 - 代码中的if判断没有加括号包裹判断条件,不符合Java语法规范
修复方案
改用findElements方法获取匹配元素的集合,通过判断集合是否为空确认元素是否存在,修复后代码如下:
import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; // 此处省略其他业务代码 List<WebElement> targetElements = driver.findElements(By.xpath("//*[contains(text(),'addFromWishlist')]")); if (targetElements.isEmpty()) { System.out.println("In stock"); } else { System.out.println("Not In Stock"); }
额外注意事项
- 如果你要匹配的
addFromWishlist是元素的属性值而非展示文本,需要调整XPath规则,比如匹配value属性就写为//*[contains(@value,'addFromWishlist')] - XPath 1.0的contains方法区分大小写,要保证匹配的文本内容和页面实际内容大小写完全一致
- 若页面是动态渲染的,建议添加显式等待逻辑后再执行元素判断,避免元素未加载完成导致判断结果错误
内容的提问来源于stack exchange,提问作者Robert Saunders
相关产品推荐
相关产品推荐

