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

ChromeDriver在Chrome v126无法定位元素,v125正常求解决方案

Chrome v126下Selenium C#无法定位元素(v125正常、控制台可找到元素)的解决办法

问题场景

我碰到一个奇怪的问题:用C#写的Selenium测试在Chrome v125上运行完全正常,但升级到Chrome v126后,通过By.ClassName定位元素时会抛出NoSuchElementException。但Chrome v126的控制台用相同的选择器能正常找到元素,用JavascriptExecutor执行点击操作也能成功——这说明元素明明存在于DOM中,但Selenium就是定位不到。

测试代码示例:

// 初始化Driver
var chromeOptions = new ChromeOptions();
chromeOptions.BrowserVersion = BrowserVersion;
webDriver = new RemoteWebDriver(new Uri($"http://{GridMachine}:4444/wd/hub"), chromeOptions);

// 无法运行,会抛出NoSuchElementException
webDriver.FindElement(By.ClassName("saveTransaction")).Click();
var x = webDriver.FindElement(By.ClassName("saveTransaction")).Displayed;

// 可以正常运行
var js = webDriver as IJavaScriptExecutor;
js.ExecuteScript("window.document.getElementsByClassName(\"saveTransaction\")[0].click()");

可能的解决方案

  • 匹配ChromeDriver与Chrome版本
    Chrome v126必须搭配对应版本的ChromeDriver(v126.x)使用。如果你的Selenium Grid节点上的ChromeDriver还是v125版本,就会出现定位异常。检查Grid节点上的ChromeDriver版本,确保和Chrome浏览器版本完全一致。

  • 添加显式等待策略
    Chrome v126的页面渲染速度可能有变化,导致Selenium在元素还未完全加载完成时就尝试定位。用显式等待替代直接调用FindElement,等待元素可交互:

    var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10));
    var saveButton = wait.Until(driver => driver.FindElement(By.ClassName("saveTransaction")));
    saveButton.Click();
    

    或者更精准地等待元素可点击:

    var saveButton = wait.Until(ExpectedConditions.ElementToBeClickable(By.ClassName("saveTransaction")));
    
  • 检查元素是否在iframe内
    有时候控制台能找到元素,但Selenium当前的上下文不在元素所在的iframe中。先切换到对应iframe再定位元素:

    // 定位并切换到目标iframe
    var targetIframe = webDriver.FindElement(By.Id("your-iframe-id"));
    webDriver.SwitchTo().Frame(targetIframe);
    
    // 操作元素
    webDriver.FindElement(By.ClassName("saveTransaction")).Click();
    
    // 操作完成后切回主文档
    webDriver.SwitchTo().DefaultContent();
    
  • 更换元素定位方式
    Selenium的By.ClassName对类名的处理逻辑可能和浏览器控制台略有差异,比如类名包含特殊字符时。尝试用CSS选择器替代:

    webDriver.FindElement(By.CssSelector(".saveTransaction")).Click();
    
  • 禁用Chrome新特性
    Chrome v126引入的部分新特性可能影响Selenium的元素定位。可以在ChromeOptions中添加参数禁用相关特性:

    chromeOptions.AddArgument("--disable-features=BlockThirdPartyCookies,ImprovedCookieControls");
    // 测试环境下可尝试禁用沙箱
    chromeOptions.AddArgument("--no-sandbox");
    

内容的提问来源于stack exchange,提问作者MarkyMark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:43:15