量角器:只能为页面启用虚拟时间,不能为工作人员启用虚拟时间

Protractor: Can only enable virtual time for pages, not workers

在我的 angular 应用程序中,我将一些繁重的逻辑外包给了 Web Worker。 运行 在 Chrome Headless 中使用量角器进行 e2e 测试后,我在量角器进行的每个动作中都收到以下错误。请注意,e2e 结果仍然不错。只有这个烦人的错误日志。

[1003/234747.472:ERROR:inspector_emulation_agent.cc(537)] Can only enable virtual time for pages, not workers

有人看过吗?

它自己的错误来自 Chromium

Response InspectorEmulationAgent::AssertPage() {
  if (!web_local_frame_) {
    LOG(ERROR) << "Can only enable virtual time for pages, not workers";
    return Response::InvalidParams(
      "Can only enable virtual time for pages, not workers");
  }
  return Response::OK();
}

https://chromium.googlesource.com/chromium/src/third_party/+/master/blink/renderer/core/inspector/inspector_emulation_agent.cc

在您的配置文件中,有 capabilities 对象(或者 multiCapabilities 如果您 运行 针对多个浏览器的测试)。这个对象,除其他外,有一个 属性 args 它接受参数数组

capabilities: {
    "browserName": "chrome",
    "chromeOptions": {
        "args": ["incognito","--window-size=1920,1080","disable-extensions","--no-sandbox","start-maximized","--test-type=browser"]
    }
}

删除 "--no-sandbox" 参数!

这个人所做的是允许您的测试 运行 来自远程容器(即在 Jenkins 中)。同时,如果您在 运行 在您的机器上进行测试时包含该参数,它会产生如此处所述的副作用 Chrome Instances don't close after running Test Case in Protractor


我想这也会导致您的错误。所以"Can only enable virtual time..."大概说明没有"virtual"容器,只有本地进程。

我的临时解决方案是始终从我的本地配置中删除此参数,但不提交它。

我的永久解决方案是通过 G运行t 创建一个可选标志 isHost,默认值 false。然后在我的配置中,如果参数是 true,我将 "--no-sandbox" 推到其他 chrome 参数之上。当我配置 CI 我用那个参数启动 Protractor