2016-06-28 12 views
-1

座標とロボットクラスを使用する代わりに、driver.findElement(By.id("foobar")).click(); のようにセレンで要素をクリックすると、パースペクティブと非利便性の違いがありますか?セレンでクリックしてロボットでクリックすることの違い

例:バグのために要素をクリックできない場合、ロボットはそれをクリックできません。セレンはそれをクリックできますか?この使用

+0

質問が分かりません。 Robotクラス(?)の座標を使用してボタンをクリックできない場合は、Seleniumを使用して要素idでクリックすることができますか? – Taegost

+0

私は、シンプルなユーザーのクリック、ロボット、セレン(または結局のところJ)に近いもの(そしてその理由)を理解しようとしていました。 – fx86f

答えて

3

セレンは、通常のユーザーができることとできないことをできるだけエミュレートしようとします。findElement(...).click()を使用すると、操作を実行できない場合、Seleniumは例外を発生させます。たとえば、要素がDOMに存在するが表示されない場合、例外が発生します。また、Seleniumの.click()は要素をスクロールしようとします。表示されていない要素をクリックするように尋ねられた場合はをスクロールすると表示されますが、Seleniumはスクロールして表示します。

また、に注目してください。通常、Seleniumは要素の座標を取得し、それらの座標をクリックします。したがって、可動要素が常にfindElement(...).click()this answerで表される)によってヒットされるという考え方は間違っています。findElementを使用すると、座標が取得され、clickイベントが送信されるウィンドウが最小限に抑えられますが、完全に除去されるわけではありません。 Seleniumが座標で動作する理由は、ユーザーが何をするかを再現するためです。ユーザーは要素を見て、要素の座標にマウスを移動してクリックします。要素の上に透明なオーバーレイがある場合、オーバーレイは要素ではなくクリックを取得します。これは、セレンが、findElementで選択した要素に直接クリックを送信するのではなく、座標をクリックするために機能します。

あなたはクリックを実行するためにロボットを使用している場合は、賭け金は、いくつかの注意事項と、おおよそ上記と同じである:移動要素をクリックしようとすると

  1. が問題の詳細ですので、時間の窓座標を取得してからクリックするまでの時間が長くなります。

  2. RobotはDOMの構造がわからないため、要素をスクロールしません。

Rogério Peixoto JavaScriptを使用してクリックを実行できることが指摘されています。 これにより、ユーザーが実際に要素にアクセスできるかどうかにかかわらず、要素のclickのイベントハンドラが呼び出されます。これは、そうでなければクリックできない要素をクリックできるようにすることができますが、そうしなければならない主張がない限り、これは行いません。私はSeleniumのクリックとJavaScriptのクリックin this answerの違いを見てきました。

+0

ものを覚えているのはいつもいいです、その訂正のおかげで:) –

0

driver.findElement(By.id("foobar")).click();

は、あなたがそれは関係なく、foobar idを持つ要素をクリックすることを意味します。

座標を使用している場合、要素の位置が変更された場合、その要素をクリックすることはできません。原因あなたの更新の質問への答えを更新し

私はあなたがこれを取得しようとしているところはかなりよく分かりません。

Seleniumでは、要素が表示されている場合はclickイベントを受け取りますが、そうでない場合は例外が発生します。

あなたはJavaScriptを使用して、それをクリックして強制できます。

WebElement element = driver.findElement(By.id("foobar")); 
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element); 

しかし、それはそのボタンに登録された最終的なJavaScriptのイベントをトリガしません、あなたはそれを手動で発射する必要があります。

+0

あなたは正しいです、もっと具体的にするための例を追加しました。 – fx86f

1

要素がバグによってクリックできない場合、ロボットはそれをクリックできません。セレンはそれをクリックできますか?

これは、クリックを妨げるバグによって異なります。ほとんどの場合、より保守性が高いので、element.click()を使用することをお勧めします。座標クリックの場合、要素が移動するとどうなりますか?次に、element.click()が動作する新しい位置でスクリプトを更新する必要があります。座標のクリックに関するもう1つの問題は、要素が移動し、別の要素がその場所にある場合です。そうすれば、スクリプトは失敗する可能性がありますが、追跡が非常に難しくなります。例は、クリックされる要素をカバーする予期しないポップアップです。座標のクリックがポップアップに表示され、最終的にエラー/エラーが発生します。 element.click()を実行すると、少なくとも別の要素がクリックを受け取るというエラーが表示されます。その後、デバッグから何が途切れるかを追跡できます。

1

私の経験ではセレンがクリックされています。ブラウザーウィンドウ内の要素をクリックすると、その時点でデスクトップ上にあるものはどれもクリックするように見えます。個人的には、クリックしているウィンドウを指定できるように、可能な限りSeleniumのクリックを使用することをお勧めします。

関連する問題