将鼠标悬停在元素上并使用Java等待Selenium WebDriver

时间:2013-04-30 17:09:25

标签: java selenium selenium-webdriver mouseover mousehover

编辑:所以我想出了一种将鼠标悬停在元素上的简单方法,但我想等待结果弹出。 Chrome网页驱动程序悬停在元素上并且移动得太快,以至于我无法看到文本。在文本弹出之前,如何让它保持悬停状态?我查看了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();

再次感谢大家!

干杯。

4 个答案:

答案 0 :(得分:10)

你不能依赖睡眠,所以你应该试试这个:

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

ExpectedConditions课程中有很多方法。

以下是一些信息:

希望你觉得这很有用。

答案 1 :(得分: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) {

    }
}

希望能帮助其他类似的人!

干杯!

答案 2 :(得分:2)

我也有类似的问题。

我已经解决了。

是的,我认为我们可以插入延迟或使用函数,(...)。findElements(...)。size(),以获得更好的性能。如果函数的结果不是0,那么我们可以单击或执行元素。

根据“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;
        }
    }

等到显示所需的元素或时间到了〜!

答案 3 :(得分:1)

以下是C#for Mouse Hover中的代码。

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");
}

上面的代码基本上使用了Action类的MovToElement函数,然后获取元素位置(xpath)并得到它的属性(可能是(alt,title等))并将其存储在字符串中。稍后将此值与文本进行比较。如果布尔值为true,则测试通过。