使用 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 <div>
元素将具有 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 对第一条评论的回答:<script type ="eee">..</script>
可能会成功。需要对 DOM 进行详细审查。
@Sindhu 对第二条评论的回答:根据您第一条评论中的 HTML,xpath 无法让我找到文本为 @ 的元素987654339@ 和getText()
背后的可能原因没有检索到任何内容。随意提出一个新问题。但我相信你明白我回答中的解释。以上是关于使用 Selenium 验证悬停功能的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 和 Selenium 将鼠标悬停在图形上