You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:54:02