2012-02-09 14 views
2

最初はwatir-webdriverとWebアプリケーションのテストで一般的なので、まだいくつかの概念をラップしようとしています。watir-webdriver - クリックJavascriptボタン

<input type="submit" class="button" value="Search" name="_target0"> 

browser.button(:value, "Search").exists? 
=> "true" 

browser.button(:value, "Pesquisar").present? 
=> true 

browser.button(:name, "_target0").value 
=> "Search" 

これは、実際にクリックされた取得するボタンを駆動しない、

browser.button(:name, "_target0").click 

だから私は駆動Firefoxが

browser.button(:name, "_target0").fire_event('on_click') 
browser.button(:name, "_target0").when_present.click 
のいずれかを使用してボタンをクリックしてしまった:このJavaScriptの要素を持つ

しかし、それらの違いは何ですか?限り、それらの間の相違点として

+1

「これはうまくいかない」と私たちにはあまり言いません。何が起こると思いますか? 'browser.button.present? 'を実行するとどうなりますか –

+0

ThanksŽeljko。あなたの提案ごとに質問をよりよく述べようとしました。しかし、私の唯一の疑問は、.fire_event( 'on_click')を使ってjavascriptがイベントに対して取るアクションを定義することとの違いです。when_present –

答えて

2

  • .click =オブジェクト上でマウスの左クリックをシミュレートします。
  • .fire_event =マウスクリックで正常にアクセスできるかどうかにかかわらず、javascriptを実行します。
  • when_present.click =オブジェクト が使用可能になり、クリックする前に表示可能領域(フルブラウザ ウィンドウ)に表示されるのを待ちます。

when_presentは、サイトがAJAXを使用している場合に便利で、あるオブジェクトとやり取りすると別のオブジェクトが最終的に表示されます。 .clickを使用すると、使用可能になる前に2番目のオブジェクトをクリックしようとする可能性があり、スクリプトは失敗します。

あなたのページはAJAXフォーム、およびあなたはすぐにロードされませんと対話しようとしているボタンが含まれている可能性がありますが、少し遅れたとき:

  • テキストフィールドが入力されている
  • 別のボタンは、ページがfire_eveのでなど

コンテンツ

  • を生成終了
  • クリックされましたntはボタンの物理的表現を探すのではなく、ソースのJSイベントを探します。ボタンが表示される/表示される/実行可能になる前に使用できます。

  • +0

    ああ、私は、感謝アダムを参照してください。それで、browser.button(:value、 "Search")が存在すると予想されますか?とbrowser.button(:値、 "Pesquisar")。present?ボタンはまだ使用できませんが、trueを返しますか? –

    +1

    存在する場合は? trueを返します。ボタンはDOMにあります。存在する場合? trueを返すと、ボタンが表示され、使用可能になります。この場合、クリックはうまくいくはずですが、ボタンがまだ使用できない問題が発生しました。 私のロケータのボタンを含むDIVを使用してこの問題を解決しました。理由を説明することはできませんが、この特定の方法でボタンにアクセスすると、私の問題が解決されました:browser.div(:name、/testing/).button(:value、 "Search")クリック –

    +0

    Curious Joao - これを行いましたアプローチ(divを使用してコメント)あなたのために働く?または、以前のソリューションの1つを続行しましたか? –

    1

    テストを実行しているブラウザのズームレベルを確認できますか?

    clickメソッドでも同じ問題が発生しましたが、ブラウザ(IE9)のズームレベルを100%に戻して修正できました。

    Internet ExplorerのSelenium Webdriver要件では、これはネイティブイベントが動作するための要件であることに注意してください。 here

    +0

    Firefoxを使用していました。とにかくありがとう。 –

    関連する問題