量角器 - 日志类型 'performance' 未找到错误

Protractor - log type 'performance' not found error

webdriver-manager 12.1.5

量角器版本 5.4.2

Chrome 版本 75.0.3770.100

browser.manage().logs().get('performance');

这在升级我的 webdriver-manager 和量角器版本之前工作正常。

(node:27715) UnhandledPromiseRejectionWarning: WebDriverError: invalid argument: log type 'performance' not found
 (Session info: chrome=75.0.3770.100)
 Build info: version: '3.141.59', revision: 'e82be7d358', time:    '2018-11-14T08:25:53'
System info:, os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.4', java.version: '1.8.0_191'
 Driver info: driver.version: unknown
at Object.checkLegacyResponse (node_modules/selenium-webdriver/lib/error.js:546:15)

如果我评论 browser.manage().logs().get('performance');和其他与性能相关的代码,然后测试运行正常。

webdriver-manager 日志显示:

Starting ChromeDriver 75.0.3770.90  on port 12268

新版本可能不支持性能日志类型。您始终可以使用 getAvailableLogTypes 函数来检查支持的日志类型。我尝试了以下代码

var supportedLogTypes = await browser.manage().logs().getAvailableLogTypes();

收到输出:

这意味着您只能使用两种支持的日志类型中的一种。

我用 chrome 75.* 和量角器 5.4.2 版本尝试了同样的事情。以下是我的发现。

  1. loggingPrefs 对象是公认的功能之一,如 chromeOptions。该对象允许我们决定日志记录部分的首选项。有关功能的更多详细信息,请参阅 link

    在量角器上下文中,我们必须将 loggingPrefs 对象传递给功能以启用它。

    一旦我们通过它,我们就可以使用 browser.manage().logs().get('performance'); 来获取所有性能日志。

  2. 如果您想更改 perfLoggingPrefs,那么它是 chromeOptions 对象的一部分,必须在那里进行更新。如果我们想使用默认值则无需提及。

我在 this github issue thead 上发现了一个潜在的解决方案。显然最近 chromedriver 开始更严格地遵守 W3C 标准,这影响了 webdriver 激活日志的方式。

我们可以通过在 chrome 选项中设置 w3c: false 标志来解决这个问题。

capabilities: {
    browserName: 'chrome',
    loggingPrefs: {
        browser: 'ALL',
        driver: 'ALL',
        performance: 'ALL',
    },
    'goog:chromeOptions': {
        perfLoggingPrefs: {
            enableNetwork: true,
        },
        w3c: false,
    },
},

chrome 对 w3c 使用更严格的规则,当我测试 chrome 驱动程序 96 时,将 w3c 设置为 false,我可以获取网络日志,但是 find_element 失败并且 return 不是 WebElement 的字典值