CucumberがあるRuby自動化フレームワークで、JenkinsのDockerでChromeヘッドレスブラウザーでいくつかのテストを実行しています。数日前に、「このChromeDriverのバージョンはChromeバージョン75 "のみをサポートします。今回はChromeDriver 2.46を使用し、google-chrome-unstableブラウザーで次のコマンドを使用しました:
_#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チェックを無効にする可能性は素晴らしいと思います。
あなたがしなければならないのは、Webドライバを初期化するときにW3Cを無効にすることだけです
options = webdriver.ChromeOptions()
options.add_experimental_option('w3c', False)
create_webdriver('Chrome', options=options)
環境:
このエラーメッセージ...
unknown command: Cannot call non W3C standard command while in W3C mode (Selenium::WebDriver::Error::UnknownCommandError)
...ChromeDriverが非W3C標準コマンドを呼び出すことができなかったことを意味します新しいWebBrowserの開始/起動中のW3Cモード、つまりChrome Browserセッション。
ここでの主な問題は、ChromeDriverのクライアントがW3C準拠のセッションを要求したときに応答がfromChromeDriverはW3C仕様に準拠していないため、言語APIでエラーが発生します。
W3CモードでのChromeDriverの応答が標準に準拠していない John Chen(所有者-Google ChromeのWebDriver)の説明に従って 言及 その、Simon Stewart(クリエーター-WebDriver)はそれを更新しました:
W3cセッションの新しいセッション応答は次のようになります。
{
"value": {
"sessionId": "some-uuid",
"capabilities": {
"browserName": "chrome",
...
}
}
}
ただし、w3c
オプションをchromeOptionsでtrue
に設定して新しいセッションを開始すると 次のように:
セレン/ Python:
from Selenium import webdriver
opt = webdriver.ChromeOptions()
opt.add_experimental_option('w3c', True)
driver = webdriver.Chrome(chrome_options=opt)
Selenium/Java:
{
"sessionId": "af4656c27fb94485b7872e1fc616923a",
"status": "ok",
"value": {
"browserName": "chrome",
...
}
}
返される応答は次のようになります。
{
"sessionId": "af4656c27fb94485b7872e1fc616923a",
"status": "ok",
"value": {
"browserName": "chrome",
...
}
}
これは、JSONワイヤープロトコルの正しい形式の応答(「ステータス」は整数になります)でも、正しい形式のW3C応答でもありません。正しく形式された応答がないと、w3c互換を使用できません。
この revision およびこの commit がこの問題に対処しました。
ChromeDriver v75.xとChrome v75.xを使用しているにもかかわらず同じエラーが表示される場合は、 ExperimentalOptionw3c
astrue
排他的に以下のとおりです。
capabilities = { "chromeOptions" => {'w3c' => true} }
ChromeDriver v74.x、ChromeおよびChromDriverコンボがw3cで実行されるまでデフォルトではモードですが、 chromedriver/server/http_handler.cc にバグがありました。 goog:chromeOptions.w3c=falseの詳細に従って、POST空のボディを持つリクエスト :
メソッド
HttpHandler::HandleCommand
は、セッションkW3CDefault
値の代わりにgoog:chromeOptions.w3c
定数の値をチェックします。その結果、JSONワイヤープロトコルのサポートが壊れました。ここで、POST空の本文を含むリクエストが許可されます。JSONワイヤープロトコルは、displayed
エンドポイントはw3cモードで再開されます。W3CWebDriver仕様では「表示された」エンドポイントの使用が禁止されておらず、この機能は一部のAPIで積極的に使用されています。
Is Element Displayed
コマンドはW3C仕様の一部ではありませんが、一部のAPIで引き続き使用されており、その機能をそれらのAPIで複製するのは難しい場合があります。これ変更リスト[ revision および commit ]は、W3Cモードでこのコマンドを再度有効にしますW3Cモードへの移行を容易にするため。
@Johnは、明日、修正によりChromeDriver v75.0へのアップデートを期待することをすでに確認しています。
John Chen [所有者-Google ChromeのWebDriver]が約束したように、ChromeDriverバージョン75.0.3770.90および76.0.3809.25がリリースされ、 ChromeDriver Downloads サイトで入手できるようになりました。これらのバージョンには、以前のリリースのChromeDriver75および76:
さらに、バージョン76.0.3809.25には次の変更も含まれています。
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)
end
この例のように、最後にw3c:falseを追加するだけです。
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(chromeOptions: { args: ["window-size=#{DEFAULT_X_RES},#{DEFAULT_Y_RES}"], w3c: false })
私のPHPインターネットの深さを検索する友人のために...
PHPUnit_Extensions_Selenium2TestCaseの最新バージョン
現時点では、composerの制約
"phpunit/phpunit-Selenium": ">=7",
"phpunit/phpunit": ">=6"
次のオプションを使用できます。私の闘争に注意してください::
'w3c' => false
これは文字列ではなくブール値でなければなりません。
class NavigationTest extends PHPUnit_Extensions_Selenium2TestCase
{
public function setUp()
{
static $count;
$count or $count = 1 and print PHP_EOL . 'Java -jar ' . dirname(__DIR__) . '/Selenium-server-standalone-3.141.59.jar' . PHP_EOL;
self::shareSession(true);
$this->setDesiredCapabilities([
"chromeOptions" => [
'w3c' => false
]
]);
$this->setHost('localhost');
$this->setPort(4444);
$this->setBrowser('chrome');
$this->setBrowserUrl('http://localhost:9919/');
$this->prepareSession()->currentWindow()->maximize();
}
}
使用しているフレームワークがわからないが、ブラウザーとChromedriverを最新のv75.0.3770.90に更新した後も同じエラーが発生する。私の提案は、スクリプトでセッションの初期化セクションを探し、w3c
を無効にするオプションを追加することです。たとえば、アップグレード前の鉱山:
chrome_options = Selenium::WebDriver::Chrome::Options.new
options[:options] = chrome_options
Capybara::Selenium::Driver.new(app, options)
アップグレード後
chrome_options = Selenium::WebDriver::Chrome::Options.new
chrome_options.add_option('w3c',false)
options[:options] = chrome_options
Capybara::Selenium::Driver.new(app, options)
私の場合、w3cをサポートしていないのはSeleniumの別のバージョンでした。 chromedriverをバージョン74.0.3729.6に減らして、すべての作業を機能させます。また、SeleniumのバージョンをW3Cをサポートする最新バージョンに更新することで修正することもできます。