2012-01-27 14 views
1

最近、テストスクリプトにwatirを使用することからwatir-webdriverを使用するように変更しました。この奇妙な振る舞いを除いて、うまくいきます。ファーストネームフィールドやラストネームフィールドなど、複数のテキストフィールドを持つフォームの場合は、これらのフィールドが正しく入力されません。これは通常、ファーストネームを入力して、最後の名前の1文字または2文字を入力し、最初の名前フィールドに戻り、残りの名前をファーストネームに追加します。watir-webdriverでテキストフィールドが正しく入力されていない

例として、姓/名字のテキストフィールドがあります。私はJimを姓に、Johnsonを姓に記入するためのスクリプトを書いています。スクリプトを実行すると、私はJimhnsonと姓のためにJoと結婚します。それは、最後の名前フィールドの真ん中のファーストネームフィールドに戻ることにしたようなものです。これは私がWatirを使ったことで一度も経験したことのないもので、似たような事例を探し回っていますが運がなかったことです。うまくいけば誰かが助けることができる。ここで私が使用しているコードのサンプルです。私は「睡眠1」を使いたくはありませんが、この奇妙な行動を防ぐのは唯一のものだと分かっています。

def fill_in_applicant_name(fName, lName) 
    puts "Fills in the applicant first name" 
    @@b.text_field(:id, "ApplicantFirstName").set(fName) 

    #sleep 1 

    puts "Fills in the applicant last name" 
    @@b.text_field(:id, "ApplicantLastName").set(lName) 
end 
+1

問題とコードをページHTMLコードに含めることをお勧めします。 –

答えて

1

sleep文が必要な場合は、text_fieldに値が設定された後にAJAXまたはJavascriptが起動するように見えますか?あなたが明示的に記入されているtext_fieldsの名前をつけているので、テキストが1つのボックスに終わる理由について私が考えることができる他の理由は本当にありません。

変数名のまわりのかっこは不必要で、Rubyのようなものではありません。それらは削除することができます。

私のアプローチでは、テキストフィールドにアクセスできることを確認するためにwhen_presentを使用します。必要に応じて他の待機方法を使用して

def fill_in_applicant_name(first, last) 
@browser.text_field(:id, "First").when_present.set first 
@browser.text_field(:id, "Last").when_present.set last 
end 

問題が解決しない場合は、エラー

Watir::Watir.until(30) { @browser.text_field(:id, "Last").visble? } 

を受信した場合、あなたが私たちを助けるためにテストしているページからいくつかのコードを投稿することができますか?

+0

アダムに感謝します。残念ながら、私はwhen_presentと他の待機メソッドを試して、それが動作するかどうかを確認しましたが、それはまだそれを行います。これまでの唯一の修正点は、スリープステートメントを置くことでした。要素が現れるのを待つのではなく、テストフィールド間でスクリプトを一時停止するのはスリープ状態ではありません。何らかの理由でこれが機能し、フィールドが正しく記入されます。 – Conner

+0

もう一度、ページHTMLを見ることができますか? RubyとWatir/Webdriverのバージョンも参考になります。これらのテキストフィールドの値を変更するAJAXや他の動的要素がなければ、Ruby/Watirがこれを引き起こす理由は考えられません。 –

+0

答えが見つかりました。 Firefoxのネイティブイベントを「true」に設定しました。私はそれを「偽」に変更し、魅力的に働いています。私は理由を理解できませんが、今は正しく動作しています。 'code' profile = Selenium :: WebDriver :: Firefox :: Profile.from_name "conner" プロファイル。native_events = false #変数を設定して新しいブラウザを開きます。 @ Watcher :: Browser.new:firefox、:profile =>プロフィール 'code' – Conner

1

まあ、firefoxのネイティブイベントをオフにして、watir-webdriverテストを作成して実行するのに1週間ほどかかりました。これは間違いなく問題の答えでした。ネイティブイベントをオフにして以来、私はこの異常な動作が一度も発生していません。テスト/チェックは正常に実行されており、少し問題があります。アプリのページの1つにポップアップメッセージが表示され、次のページに進むと消えません。ちょっと面倒ですが、テストには何ら影響しません。皆さん、ありがとうございます。ネイティブイベントをオフにするコードはもう一度あります。

profile = Selenium::WebDriver::Firefox::Profile.from_name "webdriver" 
profile.native_events = false 
browser = Watir::Browser.new :firefox, :profile => profile 
+0

ヒント: '' 'Profile.from_name'''を使わないでください。これにより、 "webdriver"プロファイルを持たないマシンでスクリプトが実行されなくなります。代わりに '' 'Profile.new'''を実行してください – jarib

関連する問題