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

Webdriverio获取window对象返回奇怪值?如何获取真实window对象

Understanding the WINDOW: ':wdc:...' Response in WebdriverIO

What is WINDOW: ':wdc:1521829902692'?

那个看起来奇怪的WINDOW: ':wdc:xxx'其实是WebdriverIO内部给当前浏览器窗口分配的唯一标识。原因很简单:当你尝试通过browser.execute()直接返回整个window对象时,浏览器没办法把这个庞大的全局上下文对象完整序列化成Webdriver能传输的格式——window里包含太多循环引用、DOM元素、原生API等无法序列化的内容。所以WebdriverIO退而求其次,返回了这个内部窗口ID,告诉你“这是当前窗口的引用”,但不是你要的实际window对象的内容。

How to Get the Actual window.myVar Value?

你不需要获取整个window对象,直接在execute的回调里返回你需要的具体变量就行。修改你的代码如下:

方案1:直接返回目标全局变量

it('should get window.myVar', (done) => { 
  const url = 'http://www.example.com'; 
  browser.url(url); 
  browser.waitForVisible('body', 20000); 
  browser.pause(1000); 
  
  browser.execute(() => {
    // 直接返回你需要的全局变量
    return window.myVar;
  }).then(result => {
    // 结果会在result.value里
    console.log('window.myVar的值:', result.value);
    done();
  }); 
});

方案2:返回多个全局变量(如果需要)

如果你需要同时获取多个全局变量,可以把它们包装成一个对象返回:

browser.execute(() => {
  return {
    myVar: window.myVar,
    otherGlobalVar: window.otherGlobalVar
  };
}).then(result => {
  console.log('获取到的全局变量:', result.value);
});

核心逻辑就是:browser.execute()的回调函数运行在浏览器的上下文里,你可以在这个函数里直接访问window的所有属性,然后把需要的可序列化数据(比如字符串、数字、普通对象数组等)返回,WebdriverIO会把这些数据传输回你的测试代码中。

内容的提问来源于stack exchange,提问作者Luca S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:52