9

编辑:所以我想出了一种将鼠标悬停在元素上的简单方法,但我想等待结果弹出。Chrome 网络驱动程序悬停在元素上,移动速度太快,我无法看到文本。我怎样才能让它保持悬停直到文本弹出?我查看了 Wait() 和 until(),但我似乎无法让它们正常工作(我认为这是因为我并没有真正等待代码中的布尔值变为 true。除非有人有一些建议? )。这是我到目前为止所拥有的......

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

4 回答 4

12

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

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

ExpectedConditions你在课堂上有很多方法。

这是一些信息:

希望您觉得这个有帮助。

于 2013-05-23T22:26:33.943 回答
7

似乎我当时的方法只是没有等待足够长的时间让文本变得可见。在它的末尾添加一个简单的睡眠功能正是我所需要的。

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

    }
}

希望能帮助其他类似的绑定!

干杯!

于 2013-05-23T14:37:47.740 回答
2

我也有和你类似的问题。

我已经解决了。

是的,我认为我们可以插入延迟或使用函数 (...).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;
        }
    }

等到想要的元素出现或者时间到了~!

于 2014-08-13T05:56:21.527 回答
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");
}

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

于 2013-12-05T09:48:43.200 回答