Chrome更新后Selenium+Java出现Compound class names not permitted错误
问题解决:Selenium InvalidSelectorException(复合类名不被允许)
问题背景
此前所有测试均正常通过,Chrome浏览器更新后测试出现错误。添加以下依赖并设置系统属性后,部分测试恢复正常,但仍抛出org.openqa.selenium.InvalidSelectorException: Compound class names not permitted错误:
- 添加的Maven依赖:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-http-jdk-client</artifactId> <version>4.8.1</version> </dependency>
- 初始化WebDriver前添加的代码:
System.setProperty("webdriver.http.factory", "jdk-http-client");
当前使用的Selenium版本为4.8.1。
错误原因
该错误是因为你在使用By.className()定位元素时,传入了包含空格的复合类名(例如"class-a class-b"),而Selenium的className定位器不支持同时指定多个类名。
解决方法
将复合类名的定位方式替换为以下任意一种:
- 使用CSS选择器:把
By.className("class-a class-b")改为By.cssSelector(".class-a.class-b")(注意类名间用点连接,无空格) - 使用XPath定位:可以通过匹配class属性内容来定位,示例:
// 精确匹配完整class属性值 By.xpath("//*[@class='class-a class-b']") // 匹配同时包含两个类名的元素(适用于class属性顺序可能变化的情况) By.xpath("//*[contains(@class,'class-a') and contains(@class,'class-b')]") - 拆分单个类名:如果其中一个类名足以唯一定位元素,直接使用单个类名,例如
By.className("class-a")
内容的提问来源于stack exchange,提问作者Diana Karapetyan
相关产品推荐
相关产品推荐

