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

Edge浏览器125版本下Selenium元素定位失败问题求助

Chrome 125升级后Selenium元素定位失败的解决方案

针对你遇到的Chrome升级后Selenium测试全部失败、元素定位超时的问题,可按以下步骤排查解决:

1. 确保ChromeDriver与Chrome版本完全匹配

Chrome 125必须搭配125.x版本的ChromeDriver使用,版本不匹配是这类问题的核心诱因。如果你的ChromeDriver还是旧版本,直接下载对应主版本的ChromeDriver替换即可。

2. 修正等待逻辑,避免提前终止等待

你当前的等待代码存在缺陷:e.FindElement()在元素未找到时会直接抛出异常,导致WebDriverWait提前终止,而非持续等待到超时。改用更安全的等待方式:

方式一:使用官方预期条件(需引用SeleniumExtras.WaitHelpers包)

var wait = new WebDriverWait(this.driver, TimeSpan.FromSeconds(10));
// 先等待元素存在,再等待可见(根据测试需求选择)
var targetElement = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector(selec)));

方式二:用FindElements避免异常

如果不想额外引用包,可通过FindElements判断元素是否存在(返回空列表不会抛出异常):

var wait = new WebDriverWait(this.driver, TimeSpan.FromSeconds(10));
bool elementExists = wait.Until(d => d.FindElements(By.CssSelector(selec)).Count > 0);
if (elementExists)
{
    var targetElement = this.driver.FindElement(By.CssSelector(selec));
    // 后续操作
}

3. 页面刷新后添加加载完成等待

页面刷新后,旧DOM会被销毁,需先等待页面加载完成再定位元素:

// 执行刷新操作后
this.driver.Navigate().Refresh();

// 等待页面DOM加载完成(document.readyState为complete)
wait.Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").ToString() == "complete");

// 再等待目标元素出现
var targetElement = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector(selec)));

4. 适配Chrome 125的新特性

Chrome 125可能调整了页面隔离或加载策略,可尝试添加启动参数优化:

var options = new ChromeOptions();
// 禁用站点隔离(部分场景下可解决元素定位问题)
options.AddArgument("--disable-site-isolation-trials");
// 设置页面加载策略为Eager,DOM加载完成即继续,无需等待所有资源加载
options.PageLoadStrategy = PageLoadStrategy.Eager;

var driver = new ChromeDriver(options);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:14