【问题标题】:How to test Tooltip text using MouseOver using Selenium webdriver如何使用 Selenium webdriver 使用 MouseOver 测试工具提示文本
【发布时间】:2013-03-14 05:35:30
【问题描述】:

我有一个小行李图标,当将鼠标悬停在图标上时,会显示一个工具提示文本。我想通过在 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() 放入此代码时,工具提示文本才会显示。但我正在测试鼠标悬停功能,不应该是点击图标。这太奇怪了。

【问题讨论】:

    标签: c# selenium webdriver tooltip


    【解决方案1】:

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

    简单地谷歌搜索一下,似乎这些方面的东西应该可以工作:

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

    之后,您可以验证 titleText 是否符合预期。

    【讨论】:

      【解决方案2】:

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

      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) 作为“操作”的一部分执行。我尝试了几种不同的自定义等待方法,但我只能通过 2 秒或更长时间的显式睡眠来获得所需的可靠性。

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

      【讨论】:

        【解决方案3】:

        使用 Java Robot 进行 UI 交互;此处使用机器人来控制鼠标动作。

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

        【讨论】:

          【解决方案4】:

          我也有同样的问题。如果您所说的是正确的 OP,即您没有将鼠标悬停在元素上足够长的时间,那么我很困惑为什么该方法被称为“移动到元素”而不是“移动到元素然后立即远离元素”

          单击并按住对我来说表现出与移动到元素相同的行为。我认为这可能是硒的一个错误。

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

          我正在使用 chromedriver。

          【讨论】:

          • 我正在测试中尝试类似的东西。这就是我所做的: element_to_click=claim_section.find_element_by_class_name("arrowBox") ActionChains(self.driver).move_to_element(element_to_click).perform() 但是,问题是工具提示没有隐藏。即使我将鼠标悬停在任何其他元素上,它仍然可见。这导致我的测试失败。见stackoverflow.com/questions/16426416/…
          【解决方案5】:

          我使用机器人将鼠标悬停在图标上。不过,我必须校准机器人以使用 selenium,以便更轻松地点击元素。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-01-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多