自升级到 Safari 12 后,我的自动化脚本现在出现此错误:
SessionNotCreatedError: Request body does not contain required parameter 'capabilities'.
(其他浏览器不会出现该错误)
我正在使用 javascript webdriver 绑定(bind),并且在构建 webdriver 时,我使用 withCapability 键值对:
var capabs = {
'browserName' : 'Safari',
'version' : '12.0'
}
browserUnderTest = new webdriver.Builder().
withCapabilities(capabs)
.forBrowser('safari')
.build();
我认为问题出在 safari.js 文件本身,但我对它的运作方式知之甚少,无法查明任何问题。以下是错误的全文:
SessionNotCreatedError: Request body does not contain required parameter 'capabilities'.
at Object.throwDecodedError (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/lib/error.js:514:15)
at parseHttpResponse (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/lib/http.js:519:13)
at doSend.then.response (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/lib/http.js:441:30)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
From: Task: WebDriver.createSession()
at Function.createSession (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/lib/webdriver.js:769:24)
at Function.createSession (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/safari.js:253:41)
at createDriver (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/index.js:170:33)
at Builder.build (/Users/qualit/Documents/autotests/node_modules/selenium-webdriver/index.js:660:16)
at Object.<anonymous> (/Users/qualit/Documents/autotests/K8_autotest.js:354:6)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
有没有人对此有任何想法或修复方法?
最佳答案
出现此问题是因为 Safari 12 使用新的 W3C webdriver协议(protocol) ( source ) 似乎与最新的稳定 selenium-webdriver 包 (v3.6) 不兼容
safaridriver
可以传递 --legacy 标志以使用旧协议(protocol)。直接在命令行上,这将像这样完成:/usr/bin/safaridriver --legacy
可以在您的节点程序中的驱动程序上设置此标志,如下所示:
const webdriver = require('selenium-webdriver');
const safari = require('selenium-webdriver/safari');
new webdriver.Builder()
.usingServer(await new safari.ServiceBuilder().addArguments('--legacy').build().start())
.forBrowser('safari')
.build();
这是关于 ServiceBuilder
API 的文档 - https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/safari_exports_ServiceBuilder.html
几张 GitHub 门票也涵盖了这一点:
关于javascript - 使用 Safari 12 时未创建 session Selenium/webdriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432636/