使用Selenium和C#如何实现不点击元素仅执行鼠标悬停操作
解决方案
在Selenium中实现元素悬停无需点击,使用内置的Actions类即可完成操作,具体实现方式如下:
核心实现逻辑
- 先定位到需要触发悬停效果的目标元素
- 实例化
Actions对象,调用MoveToElement()方法绑定目标元素,执行Perform()即可完成鼠标悬停操作
优化后的完整代码
using OpenQA.Selenium.Interactions; // 注意先引入这个命名空间 private void button1_Click(object sender, EventArgs e) { string url = textBox1.Text; driver.Navigate().GoToUrl(url); Thread.Sleep(2000); driver.FindElement(By.XPath("//button[@id='onetrust-accept-btn-handler']")).Click(); Thread.Sleep(3000); driver.FindElement(By.XPath("//a[normalize-space()='Mój OLX']")).Click(); Thread.Sleep(2000); driver.FindElement(By.XPath("//section[@class='login-page has-animation']//input[@id='userEmail']")).SendKeys("anastazja.bendkowska@wp.pl"); Thread.Sleep(3000); driver.FindElement(By.XPath("//input[@id='userPass']")).SendKeys("Anastazja12345"); driver.FindElement(By.XPath("//section[@class='login-page has-animation']//button[@id='se_userLogin']")).Click(); Thread.Sleep(3000); // 定位需要悬停的目标元素 IWebElement targetButton = driver.FindElement(By.XPath("//div[@class='css-1povu0j']")); // 执行悬停操作,不会触发点击跳转 Actions action = new Actions(driver); action.MoveToElement(targetButton).Perform(); // 如果需要等待悬停展开的元素加载,可在此处添加等待逻辑 Thread.Sleep(1000); // 后续操作悬停后展开的元素即可 //driver.FindElement(By.XPath("//a[normalize-space()='Wyloguj']")).Click(); }
注意事项
- 必须提前引入
OpenQA.Selenium.Interactions命名空间,否则无法调用Actions类 - 不推荐大量使用
Thread.Sleep(),可替换为显式等待WebDriverWait提升代码执行效率和稳定性 - 若悬停后需要操作展开的子元素,需等待子元素渲染完成后再执行定位点击操作
内容的提问来源于stack exchange,提问作者thomas2075
相关产品推荐
相关产品推荐

