15

テストにseleniumwebdriver2.210 + JAVAを使用しています。Gmailのすべてのメールを選択するためのサンプルコードがあります。しかし、5秒の遅延を設定しようとすると、コードは「要素が現在表示されていないため、操作されない可能性があります」というエラーをスローします。 Webドライバーを介してURLを取得した後。このコードを遅延して動作させることは可能ですか?

    driver.get("https://mail.google.com/mail/u/0/?shva=1#all");
        delay(5);  ////*......Working fine without this...........*////
    driver.switchTo().frame(driver.findElement(By.id("canvas_frame")));
driver.findElement(By.xpath("//div[@class = 'T-Jo-auh']")).click();

前もって感謝します

4

11 に答える 11

20

正しい要素を見ていますか? 同様の問題があり、ページに 2 つの同様の要素があり、1 つは表示され、もう 1 つは表示されないことが判明しました。FindElement 関数は、表示されていないものを返していました。

これを解決するには、FindElement の代わりに FindElements を使用し、Linq を使用して表示されているものを抽出しました。

于 2013-04-23T05:59:39.053 に答える
3

または、Selenium で提供されている JavascriptExecutor クラスを使用できます。その後、任意の JavaScript を実行して、Web ページ上の DOM を操作できます。

参照:: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html

于 2013-11-06T14:20:11.143 に答える
1

Selenium は、非表示またはユーザーに表示されない WebElements と対話しません。この場合、ユーザーのクリックが div 要素または同様のものと対話することは珍しくありません。これにより、実際のボタンがトリガーされますが、視覚的な目的で非表示になっています。あなたのページでFirefoxのSelenium IDEの手順を実行することをお勧めします。「非表示」要素をクリックすると、複数のイベントがトリガーされるかどうかを確認します。実際に複数のイベントがトリガーされた場合は、WebDriver コードでそれに従います。

于 2012-05-17T19:42:09.443 に答える
1

よくわかりませんが、すべての watir-webdriver 要素には - (Object) wait_until_present(timeout = 30) メソッドがあります。

この手順がオプションの場合は、可視性を確認する必要があります。

element = driver.findElement(By.xpath("//div[@class = 'T-Jo-auh']"));

if (element.isDisplayed()) {
  element.click();
}

私は Java の第一人者ではなく、上記のコードはテストされていないことに注意してください。試してみる。

于 2012-05-17T19:00:25.110 に答える
0

セレンWebドライバーを2.20.0にダウングレードしてみてください。

rubygemバージョン2.21.0および2.21.2でも同様のエラーが発生しました。

button.visible? = false私の場合、ボタンが.Ajax呼び出しを介してページに追加された場合、Webドライバーは常に戻ります。

私のテストは以前より長い間機能し、関連するものは何も変更されていません。したがって、これは現在のバージョンのWebdriverのバグだと思います。

于 2012-05-29T12:26:17.820 に答える
0

PhantomJSユーザーは、ウィンドウの最大化の回答に注意する必要があります。スクリーンショットで完全に表示されている場合でも、JavaScript で記述されたダイアログ ボックスがビューポートの外にあると見なされる可能性は十分にあります。明らかに表示されているため、一部のビューへのスクロール アクションは何も変更せず、他のすべてのアクションも同様に役に立ちません。(MacOS Safari や古い Chrome など、WebKit エンジンに基づく他のブラウザーでも同じです)

于 2016-04-13T18:47:08.463 に答える
0
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.getElementById('id').setAttribute('visibility', 'true');");

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

要素の可視性を変更することで、アクションを実行できます。SeleniumまたはJavascriptExecutorでクリックできます

于 2016-02-04T09:17:44.350 に答える
0

アプリケーションで jQuery を使用している場合は、Javascript を使用してクリックを行うことができます。WebDriver が検出を拒否する要素をクリックするためのこの単純なヘルパーを作成しました。

public static void jqClick(String selector, JavascriptExecutor driver) {
    driver.executeScript("$('" + selector + "').click()");
}

「ドライバー」として、たとえばorg.openqa.selenium.firefox.FirefoxDriver.

これが私にとって有効な唯一の解決策でした。

于 2013-02-20T12:22:52.387 に答える