こちらは、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コマンドを使うほうがいいみたいです
- 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
- 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を使っていなくても、上記のエラーが発生することがあると思います。
その場合の対処法は自分が教えてもらいたいです。。
参考