Selenium Java通过img属性定位元素报无效选择器异常解决
报错根因
InvalidSelectorException是选择器语法非法导致的,你混淆了XPath和CSS选择器的属性匹配语法:
- XPath中属性匹配需要加
@前缀,格式为//标签名[@属性名='属性值'] - CSS选择器中属性匹配不需要加
@,你写的img[@alt='xxx']是非法CSS语法,直接触发异常。
修正代码
你不需要在等待元素可见后再二次调用findElement查找,直接复用显式等待返回的元素对象即可,减少重复DOM查询开销,修正后代码:
// 移除CSS选择器中alt属性前多余的@符号 WebElement targetImg = waits.until(ExpectedConditions.visibilityOfElementLocated( By.cssSelector("img[alt='hover state of Hibiscus Camo Arch Logo T-shirt in Cotton ']") )); targetImg.click();
可选优化方案
如果img的alt属性值存在动态空格、内容小幅变动的情况,可以用更稳定的模糊匹配写法,避免硬编码全量属性值导致定位失效:
- CSS模糊匹配(匹配alt属性包含指定核心关键词即可):
By.cssSelector("img[alt*='Hibiscus Camo Arch Logo T-shirt']") - 直接使用XPath属性定位(你之前的属性写法本身是符合XPath语法的,只是选错了By类型):
By.xpath("//img[@alt='hover state of Hibiscus Camo Arch Logo T-shirt in Cotton ']")
内容的提问来源于stack exchange,提问作者Qasim_Khan
相关产品推荐
相关产品推荐

