使用 Selenium 验证悬停功能

Posted

技术标签:

【中文标题】使用 Selenium 验证悬停功能【英文标题】:Verification of hover over functionality using Selenium 【发布时间】:2022-01-04 08:09:07 【问题描述】:

我需要验证是否将鼠标悬停在使用 selenium 的 web 元素上。我知道有很多答案要求使用动作类或 getTitle()。例如:https://www.guru99.com/verify-tooltip-selenium-webdriver.html 在这两种解决方案中,都是关于获取文本并对其进行断言。但我的问题是它如何确保悬停在工作上(我的意思是,当用户悬停在工具提示文本上时应该显示)。例如:在下面的代码中,Actions 类用于 clickAndHold 和 moveToElement。然后 getText() 完成以将鼠标悬停在文本上。不使用 Actions 类,最终结果是不是和使用 WebElement.getText() 一样?

import org.openqa.selenium.interactions.Action;     
import org.openqa.selenium.interactions.Actions;        
import org.openqa.selenium.By;      
import org.openqa.selenium.WebDriver;       
import org.openqa.selenium.chrome.ChromeDriver;     
import org.openqa.selenium.*;       

public class JqueryToolTip                 
    public static void main(String[] args)                                     
     
        String baseUrl = "http://demo.guru99.com/test/tooltip.html";                    
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");   
        
        WebDriver driver = new ChromeDriver();                  
        String expectedTooltip = "What's new in 3.2";                   
        driver.get(baseUrl);                    
                
        WebElement download = driver.findElement(By.xpath(".//*[@id='download_now']"));                         
        Actions builder = new Actions (driver);                         

        builder.clickAndHold().moveToElement(download);                 
        builder.moveToElement(download).build().perform();  
        
        WebElement toolTipElement = driver.findElement(By.xpath(".//*[@class='box']/div/a"));                           
        String actualTooltip = toolTipElement.getText();            
        
        System.out.println("Actual Title of Tool Tip  "+actualTooltip);                         
        if(actualTooltip.equals(expectedTooltip))                          
            System.out.println("Test Case Passed");                 
               
        driver.close();         
           

【问题讨论】:

当您将鼠标悬停在某个元素上时,如果它显示工具文本,则捕获该元素并验证文本,如果它是按钮或链接,则捕获文本/标题并验证。 【参考方案1】:

getText()

getText() 获取该元素的可见(即未被 CSS 隐藏)文本,包括子元素。

如果没有Mouse Hover 立即下载 按钮的following-sibling <div> 元素将有style 属性设置为display: none;

在这些情况下,Selenium 将无法查看元素

<div class="tooltip"... display: none;>

你可能会遇到NoSuchElementException。


如果你Mouse Hover 立即下载 按钮的following-sibling &lt;div&gt; 元素将具有 style 属性设置为display: block;

然后 Selenium 将在元素上具有可见性

<div class="tooltip"... display: block;>

您可以提取所需的文本。

【讨论】:

感谢您的澄清。就我而言,它是一个链接。当我将鼠标悬停在它上面时,会显示消息“票可用”。但在 html 代码中,悬停前后,文本始终存在。这是一个示例 html 代码: "有票" 我使用了 getText() 但它没有检索到任何东西。所以我使用了innerText(如下)。 WebElement ticketMsg = (//span/div[contains(@id,'ccc')]/parent::span/span[@class='tooltiptext'])[1];字符串 s=ticketMsg.getAttribute("innerText"); System.out.println(s); Assert.assertEquals(s, "ticket available");所以问题是,这个验证(我正在使用这段代码)是否会确保在鼠标悬停时为用户显示提示文本。由于样式或导致悬停发生的任何代码效果,鼠标悬停文本仍然无法显示,对吧? 抱歉格式错误。我不知道如何让它变得更好。 @Sindhu 对第一条评论的回答:&lt;script type ="eee"&gt;..&lt;/script&gt; 可能会成功。需要对 DOM 进行详细审查。 @Sindhu 对第二条评论的回答:根据您第一条评论中的 HTML,xpath 无法让我找到文本为 @ 的元素987654339@getText() 背后的可能原因没有检索到任何内容。随意提出一个新问题。但我相信你明白我回答中的解释。

以上是关于使用 Selenium 验证悬停功能的主要内容,如果未能解决你的问题,请参考以下文章

Selenium geckodriver异常

Selenium/Python - 悬停并单击元素

使用 Python 和 Selenium 将鼠标悬停在图形上

有没有办法使用 Selenium 和 Python 绑定执行鼠标悬停(悬停在元素上)?

使用 Tkinter 和 Selenium 进行多处理

如何使用 selenium python 在悬停的 highcharts 上抓取值?