17

watirスクリプトに、ajaxが挿入されたログインボックスが開くのを待つように指示しようとしています。watir-webdriverを使用しており、Chromeでテストしています。wait_until以下の(簡略化された)スクリプトでコメントされているように、私は仕事に取り掛かることができません。

require "rubygems"
require "watir-webdriver"
b = Watir::Browser.new(:chrome)
site = "www.example.com"
b.goto site

puts "Click on Sign In button"
b.link(:id, 'btnLogin').click

puts "Waiting for the username/password dialog to show up"

# Below line does *not* work
# Throws this error: "uninitialized constant Watir::Waiter (NameError)" 
Watir::Waiter::wait_until { b.text_field(:id, 'username').exists? }

# Below line does *not* work
# Throws this error: "undefined method `wait_until' for main:Object (NoMethodError)" 
wait_until { b.text_field(:id, 'username').exists? }

# Below line *does* work, but I don't want to use it.
sleep 1 until b.text_field(:id, 'username').exists?

Watir::WaiterIEのみのクラスですか?または、私が間違っているのは、sleep 1waitメソッドが正常に機能することです。私はRubyとwatirに不慣れです、私は文字通り昨日これを拾いました、それで私はこれが私の無愛想さの結果であると半分期待しています。

関連する場合は、私はMac(OSX v。10.6.5)で作業しています。

4

3 に答える 3

28

最初にこれを行います:

require "watir-webdriver/wait"

次に、これらを試してください:

1

Watir::Wait.until { ... }

2

browser.text_field(:id => 'username').when_present.set("name")

3

browser.text_field(:id => 'username').wait_until_present

ここでの「存在する」とは、「要素が存在し、表示されている」ことを意味することに注意してください。

于 2010-12-05T01:54:54.840 に答える
2

ブラウザでタイムアウトを設定することもできます。このように700秒待機します。

client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 700 # seconds � default is 60 second
ie=Watir::Browser.new:firefox, :http_client => client
于 2013-10-08T13:54:50.300 に答える
1

私は数週間前に同じ問題に遭遇しました。重要なのは、Watir :: Wait.until {}はメインページがロードされるのを待つだけです(主にFirefoxでテストされています)。他のコンポーネントをロードするJavaScriptコードがある場合、これらは待機されません。

したがって、唯一の解決策は、要素を選択して明示的に表示されるのを待つことです(方法2と3を使用)。

于 2013-06-24T13:40:42.523 に答える