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

使用Specflow、Selenium和C#做UI自动化,IE驱动获取性能数据报错求助

解决IE WebDriver获取window.performance.timing报错的问题

看起来你遇到的这个问题是IE Driver老版本和IE浏览器默认配置的组合导致的——虽然手动在F12控制台能正常执行脚本,但Driver启动的IE实例在JS执行上下文里触发了Web Storage的兼容性检查,而你的环境刚好没满足这个条件。下面给你几个可行的解决思路:

1. 确保IE浏览器启用了DOM存储(Web Storage)

IE默认可能禁用了Web Storage功能,而Driver启动的是干净的IE实例,不会继承你手动打开浏览器的配置。你可以按以下步骤开启:

  • 打开IE浏览器,点击右上角的齿轮图标,选择「Internet选项」
  • 切换到「高级」标签页
  • 在设置列表里找到**「启用DOM存储」**(不同IE版本可能叫「启用会话存储」「启用本地存储」,找类似的选项),勾选它
  • 重启IE浏览器,再重新运行你的自动化脚本

2. 升级IE Driver到对应版本

你现在用的是3.8.0版本的IEDriver,这个版本比较老旧,存在不少已知的兼容性问题,尤其是和IE11的HTML5特性支持相关的。建议你下载匹配你IE版本的最新稳定版IEDriverServer(注意要选对32位/64位,和你的IE位数一致),替换掉旧的Driver后再测试。

3. 调整IE Driver的初始化配置

在创建IE Driver实例时,添加一些配置参数,可能能绕过这个Web Storage的检查问题。比如:

var ieOptions = new InternetExplorerOptions();
// 禁用原生事件,有时候能解决JS执行时的兼容性问题
ieOptions.EnableNativeEvents = false;
// 强制Driver获取窗口焦点,避免一些上下文异常
ieOptions.RequireWindowFocus = true;
// 如果你的IE开启了保护模式,也可以临时开启这个选项(不推荐长期使用,建议统一保护模式设置)
// ieOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true;

// 用配置好的options创建Driver实例
var driver = new InternetExplorerDriver(ieOptions);

4. 修改JS脚本,避免返回完整的timings对象

有时候返回整个window.performance.timing对象会让IE Driver尝试序列化所有属性,其中可能包含和Web Storage相关的隐含属性,触发报错。你可以改成只返回需要的具体属性,比如:

IJavaScriptExecutor jsExec = (IJavaScriptExecutor)driverInterface;
var res = jsExec.ExecuteScript(@"
var timings = window.performance.timing || {};
return {
  navigationStart: timings.navigationStart,
  unloadEventEnd: timings.unloadEventEnd,
  domLoading: timings.domLoading,
  domInteractive: timings.domInteractive,
  domComplete: timings.domComplete,
  loadEventEnd: timings.loadEventEnd
  // 按需添加你需要的其他timing属性
};");

这个问题的核心是:手动打开IE并使用F12时,浏览器的配置和上下文是你日常使用的状态(已经开启了Web Storage),但Driver启动的是一个独立的、默认配置的IE实例,所以会出现不一致的情况。按照上面的方法逐一排查,应该能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:31:38