我们有Cucumber Ruby自动化框架,我们很少在Jenkins的Docker上运行Chrome无头浏览器的测试。几天前,我们开始收到一个错误:“这个版本的ChromeDriver只支持ChromeDriver 75”,这一次我们使用的是ChromeDriver 2.46,使用的是google不稳定浏览器,使用的命令如下:
#Chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update -y
RUN apt-get install -y google-chrome-unstable
RUN apt-get install unzip
# Set up Chromedriver Environment variables
ENV CHROMEDRIVER_VERSION 2.46
ENV CHROMEDRIVER_VERSION 75.0.3770.8
ENV CHROMEDRIVER_DIR /chromedriver
RUN mkdir $CHROMEDRIVER_DIR
# Download and install Chromedriver
RUN wget -q --continue -P $CHROMEDRIVER_DIR "http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip"
RUN unzip $CHROMEDRIVER_DIR/chromedriver* -d $CHROMEDRIVER_DIR
ENV PATH $CHROMEDRIVER_DIR:$PATH我现在已经将chromedriver版本更新为75.0.3770.8,并将浏览器更新为google-chrome-beta=75.0.3770.27-1。
#Chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update -y
RUN apt-get install -y google-chrome-beta=75.0.3770.27-1
RUN apt-get install unzip
# Set up Chromedriver Environment variables
ENV CHROMEDRIVER_VERSION 75.0.3770.8
ENV CHROMEDRIVER_DIR /chromedriver
RUN mkdir $CHROMEDRIVER_DIR
RUN echo $CHROMEDRIVER_DIR
# Download and install Chromedriver
RUN wget -q --continue -P $CHROMEDRIVER_DIR "http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip"
RUN unzip $CHROMEDRIVER_DIR/chromedriver* -d $CHROMEDRIVER_DIR
ENV PATH $CHROMEDRIVER_DIR:$PATH现在,我可以看到错误如下:
unknown command: Cannot call non W3C standard command while in W3C mode (Selenium::WebDriver::Error::UnknownCommandError)
是否可以禁用W3C模式或下载不使用它的旧版本的Chrome和驱动程序?我认为禁用W3C检查的可能性很大。
发布于 2019-06-07 07:58:06
您所要做的就是在初始化webdriver时禁用W3C
options = webdriver.ChromeOptions()
options.add_experimental_option('w3c', False)
create_webdriver('Chrome', options=options)环境:
发布于 2019-06-05 08:21:32
这个错误信息..。
unknown command: Cannot call non W3C standard command while in W3C mode (Selenium::WebDriver::Error::UnknownCommandError)...implies表示,ChromeDriver在启动/生成新的WebBrowser (即Chrome浏览器会话)时,在W3C模式中无法调用非W3C标准命令。
这里的主要问题是,当ChromeDriver的客户端请求符合 W3C标准的会话时,但是来自ChromeDriver的响应不符合W3C规范,并导致语言API中的错误。
分析
根据ChromeDriver响应在W3C模式下不符合标准 John ( Google的所有者- WebDriver) 提到过的讨论,Stewart (Creator - WebDriver )更新了以下内容:
w3c选项启动新会话时,chromeOptions中的true设置如下:- Selenium/Python:从selenium导入webdriver = webdriver.ChromeOptions() opt.add_experimental_option('w3c',True)驱动程序= webdriver.Chrome(chrome_options=opt)
-硒/爪哇:
{ "sessionId":"af4656c27fb94485b7872e1fc616923a",“状态”:“确定”,“值”:{ "browserName":"chrome",.}
它既不是的正确形式的响应(其中“状态”将是一个整数),也不是一个格式正确的W3C响应,如果没有正确的格式响应,则不能使用w3c兼容的响应。
这个酶
由于您使用的是w3c v75.x和Chromev75.x,并且您仍然看到相同的错误,您需要将ExperimentalOption ChromeDriver完全作为true传递,如下所示:
capabilities = { "chromeOptions" => {'w3c' => true} }更新
直到ChromeDriver v74.x,Chrome和ChromDriver组合体默认在w3c模式下运行,但在handler.cc中有错误。根据goog:chromeOptions.w3c=false不适用于空体的POST请求中的详细信息
方法
HttpHandler::HandleCommand检查kW3CDefault常量的值,而不是会话goog:chromeOptions.w3c值。因此,JSON协议支持被打破,允许使用空体的POST请求。在displayed端点以w3c模式恢复之前,JSON协议是必需的。应该注意的是,W3C WebDriver规范并不禁止使用“显示的”端点,该特性在某些API中得到了积极使用。
因为Is Element Displayed命令不是W3C规范的一部分,但仍被一些API使用,其功能很难在这些API中复制。此更改列表[修订和提交]重新启用在W3C模式下的此命令,以简化向W3C模式的转换。
@John已经确认,我们预计将于明天对ChromeDriver v75.0进行修复更新。
这是解决办法
正如John的Google所有者- WebDriver承诺的那样,76.0.3809.25和ChromeDriver版本已经发布,现在可以在ChromeDriver下载站点上获得。这些版本包括以前版本的ChromeDriver 75和76的以下bug修复
此外,版本76.0.3809.25还包括以下更改:
快照

发布于 2019-06-11 02:14:37
如果使用rails + rspec + capybara + selenium获取此错误,则传递禁用W3C选项的方法如下:
Capybara.register_driver :chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {'w3c' => false}
)
Capybara::Selenium::Driver.new(app, :browser => :chrome, desired_capabilities: capabilities)
endhttps://stackoverflow.com/questions/56111529
复制相似问题