Help us understand the problem. What is going on with this article?

GUIの無いLinux上でSeleniumからHeadless Chromeを使うとsendKeysでエラーになる

More than 3 years have passed since last update.

2017/07/24 時点

  • ChromeDriver 2.30
  • Debian 8 Jessie(Dockerコンテナ上で実行)
  • google-chrome-stable 59.0.3071.115-1

Chromeでは、59からヘッドレスモードを利用できるようになりました。

元々はXvfbを使ってSeleniumのテストを動かしていたのですが、ヘッドレスにできるなら不要では!と思い、ヘッドレスモードで動かしてみました。

JavaでSeleniumを利用する場合は以下のようにChromeOptions--headlessと設定を追加してやれば良いです。

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver Driver = new ChromeDriver(chromeOptions);

https://thefriendlytester.co.uk/2017/04/new-headless-chrome-with-selenium.html

自身はSelenideを使っているので、以下のようにmavenの-Dオプションでシステムプロパティを設定して動かしました。

$ mvn test -Dchromeoptions.args=headless

ヘッドレスモードで実行すると、起動はするのですが以下のエラーが出てきました。
環境的にはGUIの無いLinux上で動かしているのですが、ヘッドレスならXvfbはいらないはず…

WebDriverException: unknown error: an X display is required for keycode conversions, consider using Xvfb

エラーを調べていくと、以下のバグレポートを発見しました。
どうやらChromeDriverのバグで、sendKeysがうまく動かない模様です。
(workaroundとして、JavaScriptで頑張ってsendKeysなどを利用しないようにすれば回避できるようですが、ちょっと面倒過ぎる…)

このバグのステータスはFixedになっており、ChromeDriver 2.31では直るようです。
ただし、記事投稿時点ではまだリリースされていません。(最新は2.30)

とりあえず直近はheadlessを利用せず、Xvfbで対応しておくのが良さそうです。

追記

記事を投稿したら、速攻で うらがみ⛄(@backpaper0)さん から以下のツイートが。

調べるとfastSetValuetrueにすると、Seleniumに組み込まれているsendKeyを利用せず、JavaScriptで実行するようになるとか。(用途としては、高速化目的なよう)

実際に適用してみると…テストが通る…!!

(workaroundとして、JavaScriptで頑張ってsendKeysなどを利用しないようにすれば回避できるようですが、ちょっと面倒過ぎる…)

て部分の対応を、fastSetValue=trueで見事に解決した模様。
しかし、パッとこの対応を思いつくうらがみさん凄い…\(^o^)/

tenten0213
ここで発信する内容はあくまで私個人の意見であり、現在所属する会社の公式見解を示 すものではありませんし、全裸だからって通報しないでいただけると幸いです。
http://tenten0213.hatenablog.com/
forcas
『FORCAS(フォーカス)』は、データ分析に基づいて成約確度の高いアカウントを予測し、マーケティングと営業のリソースをそのターゲットアカウントに集中する最新マーケティング手法「Account Based Marketing (ABM) 」の実践を強力にサポートするマーケティングプラットフォームを開発・提供してます。
https://www.forcas.com/overview/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした