4

Firefox19でSeleniumWebDriverを使用して、Webページでツールチップをテストしようとしています。
基本的に、ツールチップが表示されていることをテストしてホバーするために、マウスアクションを使用してツールチップがアタッチされている要素にカーソルを合わせようとしています。ツールチップが非表示になっていることをテストするために、別の要素の上に移動します。最初の操作は正常に機能しますが、別の要素にカーソルを合わせると、ツールチップが表示されたままになります。この問題は、Webページを手動でテストする場合には発生しません。
他の誰かが以前にこの問題に遭遇したことがありますか?Ubuntu12.04を使用しています。

4

4 に答える 4

5

Advanced Actions API はネイティブ イベントに依存しているようですが、これは Linux バージョンの Firefox ではデフォルトで無効になっています。したがって、WebDriver インスタンスで明示的に有効にする必要があります。

FirefoxProfile profile = new FirefoxProfile();
//explicitly enable native events(this is mandatory on Linux system, since they
//are not enabled by default
profile.setEnableNativeEvents(true);
WebDriver driver = new FirefoxDriver(profile);

また、私の場合、moveToElementネイティブ イベントが明示的に有効化されていても、2.30 では hover( ) アクションが適切に機能しなかったため、WebDriver をバージョン 2.31 にアップグレードする必要がありました。Linux 上の WebDriver のバージョン 2.31 と Firefox のバージョン 17 および 19 でこれをテストしました。詳細については、次のリンクを確認してください:
http://code.google.com/p/selenium/wiki/AdvancedUserInteractions#Native_events_versus_synthetic_events

于 2013-03-14T08:12:16.810 に答える
1

これはシンプルですが便利なメソッドで、指定した要素に mouseout() イベントを送信する JavaScript 呼び出しを使用します (私は By を使用して渡すことを好みますが、これは好きなように変更できます。

クリックするとツールチップが閉じることを拒否し、近くにある他のクリックイベントを覆い隠して失敗するという Chrome の問題がありました。その場合、この方法はその日を救った。それが他の誰かに役立つことを願っています!

 /**
 * We need this to close help text after selenium clicks
 * (otherwise they hang around and block other events)
 * 
 * @param by
 * @throws Exception
 */
public void javascript_mouseout(By by) throws Exception {
    for (int i=0; i<10; i++) {
        try {
            JavascriptExecutor js = (JavascriptExecutor)driver;
            WebElement element = driver.findElement(by);
            js.executeScript("$(arguments[0]).mouseout();", element);
            return;
        } catch (StaleElementReferenceException e) {
            // just catch and continue
        } catch (NoSuchElementException e1) {
            // just catch and continue
        }
    }
}

次のような任意の種類の click() イベントの後に呼び出すことができます。

By by_analysesButton = By.cssSelector("[data-section='Analyses']");
javascript_mouseout(by_analysesButton);

参考までに、私たちのアプリはChromeで古い要素の例外に向かう傾向があるため、try / catchを使用してforループを介して10回試行します。この問題がなければ、メソッドを大幅に削減できます。

于 2015-08-14T19:51:38.710 に答える
1

Firefox 19 の Selenium 2.30 でもこの問題に遭遇しました。FF 18.2 では問題なく動作します。

于 2013-02-27T06:00:51.900 に答える
-1

私も同じ問題を抱えていました。最初は、moveToElement()なしの方法を使用しましたperform()。次に、 を追加Firefox ProfileしましsetEnableNativeEventsたが、それでもうまくいきませんでした。最後に、この方法でこの問題を解決しました(単に追加するだけですperform()

WebElement ユーザー名 = driver.findElement(By.id("ユーザー名"));
アクション アクション = 新しいアクション (ドライバー);
actions.moveToElement(ユーザー名).perform();
WebElement tooltip = driver.findElement(By.id("tooltip"));
tooltip.isDisplayed();

そしてそれはうまくいきます。

于 2015-01-13T09:25:32.897 に答える