web-dev-qa-db-ja.com

要素にカーソルを合わせ、Java)を使用してSeleniumWebDriverで待機します

編集:要素にカーソルを合わせる簡単な方法を見つけましたが、結果がポップアップするのを待ちたいと思います。 Chrome Webドライバーが要素の上にホバリングし、移動速度が速すぎてテキストを表示できません。テキストがポップアップするまでホバーしたままにするにはどうすればよいですか?Wait()を確認しました。そしてuntil()ですが、正しく動作させることができないようです(これは、コードでブール値が真になるのを本当に待っていないためだと思います。誰かが提案をしない限り)。これまで...

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

みなさん、ありがとうございました!

乾杯。

8
dr4g1116

私がメソッドを使用していた時点では、テキストが表示されるのを十分に待っていなかったようです。最後に簡単なスリープ機能を追加することがまさに私が必要としていたものでした。

@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) {

    }
}

同様のバインドで他の人を助けることを願っています!

乾杯!

6
dr4g1116

あなたは睡眠に頼ることができないので、これを試してみるべきです:

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

ExpectedConditionsクラスにはたくさんのメソッドがあります。

ここにいくつかの情報があります:

これがお役に立てば幸いです。

10
Carlos

私もあなたと同じような問題を抱えています。

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

はい、パフォーマンスを向上させるために、遅延を挿入するか、関数(...)。findElements(...)。size()を使用できると思います。関数の結果が0でない場合は、クリックするか、要素に対して他の操作を行うことができます。

" https://code.google.com/p/Selenium/wiki/GettingStarted "および " WebDriver:要素が存在するかどうかを確認しますか? "によると、挿入できます遅延させ、関数を使用して、必要な要素の存在を判別します。

// 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;
        }
    }

必要な要素が表示されるか、時間が経過するまで待ちます〜!

2
sam

以下は、マウスホバー用の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");
}

上記のコードは、基本的にActionsクラスの関数MovToElementを使用し、要素location(xpath)を取得して、(alt、titleなど)のような属性を取得し、文字列に格納します。後で、この値はテキストと比較されます。ブール値がtrueの場合、テストは合格です。

1
Deepthi S