量角器 - 日志类型 '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 版本尝试了同样的事情。以下是我的发现。
loggingPrefs 对象是公认的功能之一,如 chromeOptions。该对象允许我们决定日志记录部分的首选项。有关功能的更多详细信息,请参阅 link。
在量角器上下文中,我们必须将 loggingPrefs 对象传递给功能以启用它。
一旦我们通过它,我们就可以使用 browser.manage().logs().get('performance'); 来获取所有性能日志。
如果您想更改 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 的字典值
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 版本尝试了同样的事情。以下是我的发现。
loggingPrefs 对象是公认的功能之一,如 chromeOptions。该对象允许我们决定日志记录部分的首选项。有关功能的更多详细信息,请参阅 link。
在量角器上下文中,我们必须将 loggingPrefs 对象传递给功能以启用它。
一旦我们通过它,我们就可以使用 browser.manage().logs().get('performance'); 来获取所有性能日志。
如果您想更改 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 的字典值