【问题标题】:Selenium/ToolTip/Dynamically Generated/Verify Tooltip TextSelenium/ToolTip/动态生成/验证工具提示文本
【发布时间】:2017-06-11 02:44:11
【问题描述】:

当您将鼠标悬停在按钮上时,我无法验证其 html 代码是动态生成的工具提示的文本。以下是我正在尝试处理的页面的链接:

http://www.globalsqa.com/demoSite/practice/tooltip/video-player.html

我已经尝试了很多东西并搜索了很多论坛,但没有任何帮助我获取工具提示的文本,这是第一件事。 另一个是,有一个 with 角色作为日志,当您将鼠标悬停在按钮上时,它会不断添加工具提示的文本值。当第一件事失败时,我就在这部分工作。这是我的代码,它只是让我获得最后一个悬停按钮的文本值,其余为空字段!

    Actions builder = new Actions(driver);
    WebElement a1 = driver.findElement(By.xpath("/html/body/div/span/button[@title='I like this']"));
    WebElement a2 = driver.findElement(By.xpath("/html/body/div/span/button[@title='I dislike this']"));
    WebElement a3 = driver.findElement(By.xpath("/html/body/div/div/button[@title='Add to Watch Later']"));
    WebElement a4 = driver.findElement(By.xpath("/html/body/div/div/button[@title='Add to favorites or playlist']"));
    WebElement a5 = driver.findElement(By.xpath("/html/body/div/button[@title='Share this video']"));
    WebElement a6 = driver.findElement(By.xpath("/html/body/div/button[@title='Flag as inappropriate']"));

    builder.moveToElement(a1).moveToElement(a2)
    .moveToElement(a3).moveToElement(a4)
    .moveToElement(a5).moveToElement(a6)
    .perform();

    Thread.sleep(2000);
    List<WebElement> element = driver.findElements(By.xpath("/html/body/div[@role='log']/div"));
    System.out.println(element.size());
    for(WebElement ele : element)
        System.out.println(ele.getText());

如果有人认为单独为每个按钮调用 moveToElement 并在移动之间使用 Thread.sleep() 可以工作,我已经尝试过但没有工作! 具体来说,当您将鼠标悬停在它们上时,我想要所有 6 个按钮的工具提示文本值。 Selenium 版本(3.0.1),浏览器(Chrome:Version 55.0.2883.87 m)

补充:div标签是这样构建的,附上html代码:

<div role="log" aria-live="assertive" aria-relevant="additions" class="ui-helper-hidden-accessible"><div style="display: none;">I like this</div><div style="display: none;">I dislike this</div><div style="display: none;">Add to Watch Later</div><div style="display: none;">Add to favorites or playlist</div><div style="display: none;">Share this video</div><div>Flag as inappropriate</div></div>
<div style="display: none;">I like this</div>
<div style="display: none;">I dislike this</div>
<div style="display: none;">Add to Watch Later</div>
<div style="display: none;">Share this video</div>
<div style="display: none;">Add to Watch Later</div>
<div>Flag as inappropriate</div>

【问题讨论】:

  • 当您使用Action(builder)并执行该操作时,是否出现工具提示?
  • 是的,它出现了。我使用 Thread.sleep() 来验证这一点。仍然让我感到困惑的是,为什么当我将鼠标悬停在所有按钮上并使用 /div[@role='log'] 时,我不能一次全部检索值。当我检查页面源时,我看到了 html 中的所有文本值。

标签: java eclipse selenium tooltip


【解决方案1】:

getText() 只获取元素的可见文本,因此除非在获取文本时所有工具提示仍然可见,否则只有最后一个工具提示会为您提供文本 - 这就是您所看到的。

您可以做的就是在每个元素上执行 javascript 并获取 textContent 属性。在弹出窗口仍然可见的情况下,或者在每次移动后获取文本

【讨论】:

    【解决方案2】:

    谢谢卢卡斯。我之前一直在避免迭代元素的事情,但它适用于以下代码。您可以看到我仍然没有使用工具提示元素,而是使用带有 role as log 的 div 标签作为我的值。我也会尝试使用 javascript 并给出答案。如果有人需要参考,这是我前两个按钮的代码:

    builder.moveToElement(a1).perform();
        List<WebElement> element = driver.findElements(By.xpath("/html/body/div[@role='log']/div"));
            System.out.println(element.get(element.size()-1).getText());
    
        builder.moveToElement(a2).perform();
        element = driver.findElements(By.xpath("/html/body/div[@role='log']/div"));
            System.out.println(element.get(element.size()-1).getText());
    

    【讨论】:

      【解决方案3】:

      我在 Chrome 控制台中检查页面的 HTML,因为我没有编写代码,所以我想确保工具提示出现(正如我问你的那样)。 工具提示元素的定位器可以是以下 XPath(您可以在 Chrome 的控制台中使用 $x("//your/xpath/here") 之类的东西检查它:

      "//div[@role='tooltip']"
      

      考虑到因为这个元素是动态添加的,所以选择器只在工具提示可见时才起作用;一旦您移动指针,工具提示就会消失,该元素也会从页面中删除,并且该定位器不起作用。

      所以你的代码应该是这样的:

      builder.moveToElement(a1).perform();
      String tooltipText = driver.findElement(By.xpath("//div[@role='tooltip']")).getText();
      

      在这种情况下,最好使用By 而不是WebElement,因为该元素是动态创建和销毁的。

      让我知道它是否有效,希望它有帮助。

      【讨论】:

      • "div[role='tooltip']" 作为 CSS 选择器,也适用于 Chrome 控制台。您可以尝试使用$("your css selector")
      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2011-01-08
      相关资源
      最近更新 更多