如何使用Selenium Webdriver测试鼠标悬停时的工具提示文本

5

我有一个小行李图标,当鼠标悬停在图标上时,会显示一个工具提示文本。我想通过在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个回答

2

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

快速搜索一下,似乎以下内容可以起作用:

WebElement element = driver.FindElement(
     By.XPath("//div[@class='icon_png information icon_baggageyes']"));
string titleText = element.getAttribute("title");

接下来您可以验证titleText是否符合预期。


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

1

我可能有点晚了,但我发现有效的方法是:

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

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

我主要在各种操作系统组合中使用Chrome进行测试,浏览器最大化,并且没有休眠。如果有休眠,我会遇到一些问题,主要是在Linux上(在Mac上可靠性较差)显示工具提示的时间太长了。
我有点不确定为什么"Actions"部分要执行Thread.Sleep(2000)。我尝试了几种不同的自定义等待方法,但只有通过显式的2秒或更长的Sleep才能实现我需要的可靠性。
我相信有更好的选择,但这对我有效!

0

我遇到了同样的问题。如果你说的是正确的,那么我很困惑为什么这个方法被称为“移动到元素”,而不是“移动到元素然后立即离开元素”。

另外,对我来说,点击并保持与只移动到一个元素的行为相同。我认为这可能是selenium的一个bug。

这很令人失望。我想我只能使用点击,但是点击元素会触发另一组我不想触发的操作,而悬停应该可以帮助我显示一个工具提示。

我正在使用chromedriver。


我在我的测试中尝试了类似的东西。这是我的做法: element_to_click=claim_section.find_element_by_class_name("arrowBox") ActionChains(self.driver).move_to_element(element_to_click).perform() 然而,问题是工具提示没有隐藏。即使我将鼠标移到其他元素上,它仍然可见。这导致我的测试失败。请参见https://dev59.com/7nHYa4cB1Zd3GeqPQdan - nids

0

我使用机器人悬停在图标上。不过,我必须校准机器人以与Selenium一起工作,以使元素的点击更加容易。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接