2016-11-23 8 views
0

TestNGを使用して自動テストを実行するためにSelenium 3.0.1を使用しています。Javaを使用しているSelenium WebDriverのmoveToElementマウス・ホバリング機能が安定していません

Actions builder = new Actions(getWebDriver()); 
builder.moveToElement(actionButton).build().perform(); 

しかし、テストが安定していない:私はアクションメニューに置いて、そのメニューのオプションをクリックしようとしている一つの試験で 。メニューは表示されますがすぐに終了することがわかります。そのため、オプションが見つからないためテストが失敗します。 私はこのエラーを受けています:メニューが開いている場合

java.lang.IllegalArgumentException: Must provide a location for a move action. 
at org.openqa.selenium.interactions.MoveMouseAction.<init>(MoveMouseAction.java:30) 
at org.openqa.selenium.interactions.Actions.moveToElement(Actions.java:251) 

はどうすれば確認できますか? perform()メソッドはvoidを返します。 moveToElementを2回呼び出すと、テストがより安定していることに気付きます。そうするエレガントなオプションはありますか? https://sqa.stackexchange.com/questions/3467/issue-with-losing-focus-of-hover-command-when-the-mouse-is-outside-of-the-acti 最高の私の問題について説明します。私は、この問題を見つける hover over menu

Actions builder = new Actions(getWebDriver()); 
builder.moveToElement(actionButton).build().perform(); 
builder.moveToElement(actionButton).build().perform(); 

メニューは、我々はそれの上に置くと、どのように見えるかこの

。残念ながら、解決策はまだありません。

答えて

1

メニューを開く必要がない場合は、JavascriptExecutorを使用してオプションをクリックしてみてください。 JavascriptExecutorは隠し要素もクリックできますが、JavascriptExecutorを使用してクリックがトリガーされるために必要なのは、その要素がDOM上に存在することだけです。

スニペット(ジャワ):

((JavascriptExecutor)driver).executeScript("arguments[0].click()", driver.findElement(By.cssSelector("hiddenOptionFromMenu"))); 
0

あなたはそうのように、FluentWaitでホバリングした後、表示されるように、メニューのを待つことができます。

FluentWait<> wait = new FluentWait<>(getWebDriver()) 
      .withTimeout(driverTimeoutSeconds, TimeUnit.SECONDS) 
      .pollingEvery(500, TimeUnit.MILLISECONDS) 
      .ignoring(StaleElementReferenceException.class) 
      .ignoring(NoSuchElementException.class) 
      .ignoring(ElementNotVisibleException.class) 

wait.until(x -> { return driver.findElement(menuElementBy); }); 

マウスホバーが成功した場合 - メニューが表示されて起動する - あなたはそれを2回呼び出す必要がある理由はありません。

+0

ここでの問題は、メニューが開きませんが、セレンは、サブメニューボタンを見つけることができ直前に閉じていることです。 FluentWaitはメニューが既に閉じているのでここでは役に立たないと思うので、何も待たないでください。私が間違っていれば私を修正してください。 私が探しているのは、開いた後にドロップダウンメニューをフリーズする方法ですが、クリックすることはありません。 – sami610

+0

穴のシナリオやウェブサイトそのものを見ずに間違っていると言うのは難しいです。だから私は最初に待ってみることをお勧めします。 – Moshisho

+0

JavascriptExecutorでも動作しませんか? ((JavascriptExecutor)ドライバ).executeScript( "$( 'element_selector')。hover();"); –

0

タイミングの問題のようです。

メニューは、トランジション効果を持っている場合は、効果の持続時間の遅延を追加します。

new Actions(driver) 
    .moveToElement(menu) 
    .pause(100) // duration of the transition effect in ms 
    .perform(); 

submenu.click(); 

対象要素が見えると安定になることのためにあなたはまた同じ位置に二回返さ(待つことができます行)。

+0

どちらもうまくいきませんでした。 – sami610

関連する問題