0

Selenium-Webdriver を使用して Ruby でスクリプトを作成しており、特定の要素 ID が存在するまで現在のページを更新するループを作成しようとしています。私の現在のコードは次のようになります。

until driver.find_element(:id => "test").displayed?
 puts "#{driver.title} not live - reloading..."
 driver.navigate.refresh
end

ただし、実行すると、ページを更新せずにスクリプト全体が停止します (ただし、エラーは発生しません)。を に置き換えてみましたdriver.navigate.refreshdriver.get "http://website"、同じ結果が得られます。

問題を診断するために、最初の行が何を返しているかを確認しようとしました。ID「test」の要素見つかるとputs driver.find_element(:id => "test").displayed?、コンソールに「true」が返されます。要素「test」が見つからない場合、コンソールは何も返さずにハングします。スクリプトに要素の検索を強制的に中止させるには、ある種のタイマーを実装する必要があると思いますが、これを動的に把握することを望んでいました (ページの解釈にかかった時間によって異なります)。

このループを機能させるための助けをいただければ幸いです。

4

1 に答える 1

1

私は交換します

driver.navigate.refresh 

driver.navigate.to "http://page to refresh"

少し強引ですが、この方法でスクリプトを停止するべきではありません。

また、待機コマンドを追加して、何らかの無限ループに陥らないようにします。

wait = Selenium::WebDriver::Wait.new(:timeout => 30)
wait.until{driver.find_element(:name, 'test')}

3 秒経っても目的の要素が見つからない場合は、ページを更新する必要があります。

これが役立つことを願っています

于 2012-12-17T15:21:23.593 に答える