1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Ruby WebDriverガイド

2022-02-03 14:49:33

明示的な待ち時間。

wait = Selenium::WebDriver::Wait.new(:timeout => 3)
wait.until { driver.find_element(:id => "cheese").displayed?}


暗黙の待機。

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


 内部タイムアウトです。

WebDriver は内部で http プロトコルを使用して、様々なドライバとやり取りを行います。デフォルトでは、Ruby 標準ライブラリの Net::HTTP プロトコルが使用され、デフォルトのタイムアウトは 60 秒です。Driver を呼び出して 60 秒以上かかるページを読み込むと、Net::HTTP からのタイムアウトエラーが表示されます。ブラウザを起動する前に、手動でタイムアウトを設定することができます。


client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 120 # seconds
driver = Selenium::WebDriver.for(:remote, :http_client => client)


 ruby webdriver は firefox ドライバの起動時に firebug 拡張を読み込みます。

公式Wikiにあるように
拡張機能の追加
WebDriverで起動したFirefoxインスタンスでFirebugが利用できると便利なことが多いです。

profile = Selenium::WebDriver::Firefox::Profile.new
profile.add_extension("/path/to/firebug.xpi")
driver = Selenium::WebDriver.for :firefox, :profile => profile


 そこで自分でも試してみましたが、毎回firebug.xpiが見つからないとプロンプトが表示されます。

今日、時間があったので、逆算して問題が解決しました
実は、以前は誤解していたのですが、dr =Selenium::WebDriver.for:ff
ff を起動すると、firebug プラグインを持たないシンプルなプロファイルで初期化されます。つまり、もともと firefox に firebug をインストールしていても起動しないので、firebug を使う必要があるときは firebug 拡張を読み込む必要があるのです

profile.add_extension("/path/to/firebug.xpi")


 "/path/to/firebug.xpi"はfirebug.xpiへのパスなので、我々はオンラインでfirebug.xpi(対応バージョン、私のFFは14ですが、私はfirebug-1.10.4.xpi、最高の使用(ダウンロードする非Firefoxブラウザを使って、他の場合は直接火狐にインストールするよう促され)することができ、ダウンロードしてください。
スクリプトが格納されているパスに直接 firefox.xpi を格納することができ、相対パスと絶対パスの両方が利用可能です。
Baiduの例を見てみましょう。

require 'selenium-webdriver'
 
#dr = Selenium::WebDriver.for :ff
profile = Selenium::WebDriver::Firefox::Profile.new
profile.add_extension("path/to/firebug-1.10.4.xpi") <font color="DarkOrchid">#firefox-1.10.4.xpi is stored at the same level as the script path/to below</font>
dr = Selenium::WebDriver.for :firefox, :profile => profile
dr.get "http://www.baidu.com"


 こうすることで、dom 構造を見る必要があるときに、新しい firefox を開いて dom 構造を見る代わりに、開いているテスト ページで直接デバッグすることができるようになります。