2013-04-30 12 views
8

編集:要素の上にマウスを置く簡単な方法を考えましたが、結果がポップアップするのを待っています。 Chromeウェブドライブが要素の上を移動し、テキストを表示するには速すぎる移動をします。テキストがポップアップするまで、どうやって馬鹿に抱かれ続けることができますか?私はWait()とuntil()を見ていましたが、正しく動作させることができませんでした(私はコード内でブール値が真実であることを本当に待っているわけではないと思います。 )。ここに私がこれまで持っていたものがあります...要素にマウスを合わせて、Javaを使用してSelenium WebDriverで待ちます

WebDriver driver = getWebDriver(); 
By by = By.xpath("//*[@pageid='" + menuItem + "']"); 
Actions action = new Actions(driver); 
WebElement elem = driver.findElement(by); 
action.moveToElement(elem); 
action.perform(); 

おかげさまでもう一人!

乾杯。

+0

エラーが発生していますか?現在のコードはどうなりますか?ポップアップが消えてしまうほど速くそれをホバリングしていますか? –

+0

あなたはどのブラウザを使用していますか? – acdcjunior

+0

私はChromeドライバを使用しています。私が得ているエラーは、要素が見つからないということですが、私は正しい要素があることを知っています。コマンドはただタイムアウトします。残念ながらポップアップは表示されません。 – dr4g1116

答えて

6

私がこのメソッドにいた時点で、テキストが見えるようになるまで待っていないようです。それの終わりに単純なスリープ機能を追加することは、まさに私が必要としていたものでした。

@When("^I hover over menu item \"(.*)\"$") 
public void I_hover_over_menu_item(String menuItem) 
{ 
    WebDriver driver = getWebDriver(); 
    By by = By.xpath("//*[@pageid='" + menuItem + "']"); 
    Actions action = new Actions(driver); 
    WebElement elem = driver.findElement(by); 
    action.moveToElement(elem); 
    action.perform(); 
    this.sleep(2); 
} 

public void sleep(int seconds) 
{ 
    try { 
     Thread.sleep(seconds * 1000); 
    } catch (InterruptedException e) { 

    } 
} 

似たようなバインドで他の人に役立つことを願っています!

乾杯!あなたはこれを試す必要がありますので

+0

睡眠を使うのは良くありません。代わりに、WebDriverWait –

10

あなたはスリープに頼ることはできません。

WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
    .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

あなたはExpectedConditionsクラスのメソッドをたくさん持っています。ここで

は、いくつかの情報です:あなたは、これは便利

願っています。

+0

をTrueを使用することができますが、私のアプリケーションでは正常に動作します。私はこれを将来的に見直すことができた。入力いただきありがとうございます!私ができるなら、私はこれをupvoteだろう! – dr4g1116

+0

@Carlos私はdr4g1116と同じ状況を抱えています。私のケースはChromeのメインメニューにホバリングしていて、サブメニューをクリックするのが速すぎます。私は "action.moveToElement(mainmenu).perform"と "submenu.waitforpresent()。click();"を試しました。しかし、Chromeではうまくいきません(Firefoxの場合は問題なく動作します)。助言がありますか? – user1559625

+0

@Carlos http://stackoverflow.com/questions/35855636/why-hover-to-element-and-click-submenu-does-not-work-when-browser-is-opened-fullにリンクがあります – user1559625

1

以下は、マウス・ホバーのC#のコードです。

Actions mousehover = new Actions(driver); 
IWebElement Element_Loc = driver.FindElement(By.XPath("html/body/div[1]/table/tbody/tr/td[2]/div[2]/table[2]")); 
mousehover.MoveToElement(Element_Loc).Build().Perform(); 
string Mouse_Text = driver.FindElement(By.XPath("html/body/div[1]/table/tbody/tr/td[2]/div[2]/table[2]")).GetAttribute("alt"); 

Boolean booltext = Mouse_Text.Equals("your mousehover text goes here."); 
Console.WriteLine(booltext); 

if (booltext.Equals(true)) 
{ 
    Console.WriteLine("The text is verified and matches expected"); 
} 
else 
{ 
    throw new Exception(" The text does not match the expected"); 
} 

上記のコードは、基本的にはアクションクラスの関数MovToElementを使用し、その要素の場所(XPathの)かかり、かつ多分(ALT、タイトル等)と、文字列に格納するようにその属性を取得します。その後、この値がテキストと比較されます。ブール値がtrueの場合、テストは合格となります。

2

私もあなたと似た問題があります。

私はそれを解決しました。

はい、遅延を挿入したり、(...)。findElements(...)。size()を使用してパフォーマンスを向上させることができます。関数の結果が0でなければ、要素をクリックするか、elseを実行することができます。

"https://code.google.com/p/selenium/wiki/GettingStarted"と "WebDriver: check if an element exists?"によると、遅延を挿入して関数を使用して、必要な要素の存在を判断できます。

// Sleep until the div we want is visible or 5 seconds is over 
    long end = System.currentTimeMillis() + 5000; 
    while (System.currentTimeMillis() < end) { 
     List<WebElement> elements = driver.findElements(By.id("btn")); 

     // If results have been returned, the results are displayed in a drop down. 
     if (elements.size() != 0) { 
      driver.findElement(By.id("btn")).click(); 
      break; 
     } 
    } 

要素が表示されるまで待ってください。

関連する問題