如何使用Selenium webdriver使用MouseOver测试工具提示文本

时间:2013-03-14 05:35:31

标签: c# selenium webdriver tooltip

我有一个小行李图标,当鼠标悬停在图标上时,会显示工具提示文字。我想通过在Visual Studio中编写C#代码来测试它。

以下是行李图标在html中的显示方式:

<div class="icon_png information icon_baggageyes" title="1 piece included in this fare."></div>

这是我测试工具提示的代码:

Actions a = new Actions(driver);
IWebElement tooTipObject = driver.FindElement(By.XPath("//div[@class='icon_png information icon_baggageyes']"));
a.MoveToElement(tooTipObject).Click().Build().Perform();

问题是当我逐步调试上面的代码时,工具提示文本会显示出来。但是当我运行测试时,工具提示文本现在显示。

通过在互联网上搜索,有人说原因是鼠标没有把重点放在行李图标上足够长的时间来显示工具提示文字。

但是如何解决这个问题呢?我一直在寻找解决方案,但找不到适用于我的解决方案。

另一个问题是我的代码:a.MoveToElement(tooTipObject).Click().Build().Perform(); 工具提示文本仅在我将.Click()放入此代码时才会显示。但我正在测试鼠标悬停在功能上,不应该点击图标。这太奇怪了。

5 个答案:

答案 0 :(得分:2)

由于工具提示是由div的{​​{1}}属性触发的,那么如何检查该属性值呢?它依赖于所有浏览器在悬停时将title显示为工具提示的假设(据我所知,所有桌面浏览器都这样做)。

简单地搜索一下,看起来这些内容似乎应该有效:

title

之后,您可以验证WebElement element = driver.FindElement( By.XPath("//div[@class='icon_png information icon_baggageyes']")); string titleText = element.getAttribute("title"); 是否符合预期。

答案 1 :(得分:1)

使用Java Robot进行UI交互;此处使用Robot来控制鼠标操作。

WebElement targetElement = driver.findElement(By.id("value"));
Point coordinates = targetElement.getLocation();
Robot robot = new Robot(); 
robot.mouseMove(coordinates.getX(), coordinates.getY() + 65); //Number 65 should vary

Thread.sleep(3000);
String tooltip = driver.findElement(By.id("value"")).getAttribute("title");
System.out.println(tooltip);

答案 2 :(得分:0)

我遇到了同样的问题。如果你说的是正确的OP,你没有在元素上长时间盘旋,那么我很困惑为什么这个方法被称为“移动到元素”而不是“移动到元素然后立即远离元素”

同样,单击并按住展示相同的行为,就像移动到元素一样。我想这可能是硒的一个错误。

这令人失望。我想我只会使用点击,但点击该元素会设置另一组我不想引发的动作,而悬停应该可以帮助我显示工具提示。

我正在使用chromedriver。

答案 3 :(得分:0)

我使用机器人将鼠标悬停在图标上。我必须校准机器人才能使用硒来更轻松地点击元素。

有关使用硒校准机器人的信息,请参阅此处的答案。

答案 4 :(得分:0)

我可能有点晚了,但我发现工作的是:

IWebElement elementToHover = graphRegion.FindElement(By.CssSelector(CSSSelector));
Actions hover = new Actions(driver);

hover.MoveToElement(elementToHover);
Thread.Sleep(2000);
hover.Perform();

我主要在Chrome中测试多个操作系统组合,浏览器最大化,没有睡眠我遇到了显示工具提示的时间长短的问题,主要是在Linux(Mac上的可靠性差)。

我不确定为什么Thread.Sleep(2000)是作为&#34; Actions&#34;的一部分执行的。我尝试了一些不同的自定义等待方法,但我只通过2秒或更长时间的显式睡眠来实现我所需的可靠性。

我确信有更好的选择,但这对我有用!