You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:52:43