SeleniumWebdriver で Jenkins から Firefox 多重起動時 の 「e is null」エラー対処法

  • 2
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

こちらは、Selenium/Appium Advent Calendar 2014の20日目の記事となります。

Selenium Webdriver で Jenkins からFirefox多重実行時にハマった現象について書いていきたいと思います。

現象

Jenkins から Firefox 多重起動時に下記のエラーが発生

JavaScript Error: "e is null"

前提(使用環境)

  • FireFox
  • Jenkins
  • Selenium Webdriver
  • Ruby

原因

sleepを使っているのが、よろしくないみたい

Using Thread.sleep() also can cause it,
because it increases overhead so instead implicitlyWait or WebDriverWait should be used.

SleepよりWaitコマンドを使うほうがいいみたいです

  1. Implicit Wait
implicit_wait.rb
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.manage.timeouts.implicit_wait = 10 # seconds

driver.navigate.to "https://www.google.co.jp/"
driver.find_element(:id => "gbqfq").click
  1. Explicit Wait
explicit_wait.rb
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "https://www.google.co.jp/"

wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds
begin
  element = wait.until { driver.find_element(:id => "gbqfp") }
ensure
  driver.quit
end

結論

Sleepはよろしくない
Waitを使うべし

注意

あくまでもアプローチの一つです。
Sleepを使っていなくても、上記のエラーが発生することがあると思います。

その場合の対処法は自分が教えてもらいたいです。。

参考

https://www.linkedin.com/groups/I-have-problem-in-my-961927.S.221787622

この投稿は Selenium/Appium Advent Calendar 201420日目の記事です。