【问题标题】:Verification of hover over functionality using Selenium使用 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();         
   }        
}

【问题讨论】:

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

标签: selenium hover tooltip display mouseover


【解决方案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() 背后的可能原因没有检索到任何内容。随意提出一个新问题。但我相信你明白我回答中的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 2013-06-22
  • 1970-01-01
相关资源
最近更新 更多