【问题标题】:How to avoid MouseOver on Selenium Click()如何避免 Selenium Click() 上的 MouseOver
【发布时间】:2016-05-19 13:06:41
【问题描述】:

在我的一个 Selenium 测试用例中,我遇到的问题是我不想拥有 MouseOver 效果。我就是这样做的:

  1. 点击“登录”按钮(页面右上角)
  2. 等待页面加载
  3. 点击搜索结果中的“购买”按钮(页面右中)。

问题是,在“登录”和“购买”之间有一个带有鼠标悬停效果的“购物篮”链接。因此,当我在“登录”按钮和随后在“购买”按钮上调用 Click() 时,我会触发 MouseOver,它会打开购物车的小预览,将“购买”按钮隐藏在自身后面。

这适用于 Firefox 和 MSIE。在Chrome中,我没有这种效果。

有人知道吗?

【问题讨论】:

  • 这与人类用户看到的有什么不同?您确定浏览器的差异不仅仅是网站中的错误吗?
  • 人类用户会注意到弹出菜单覆盖了“购买”按钮并将鼠标移开,因此弹出菜单消失。为什么这在 Chrome 中不是问题?我想找到一种方法将虚拟鼠标指针立即定位在目标元素上,而不是像现实生活中那样缓慢移动。
  • 首先,无法说明 Chrome 为何与众不同。可能是网站错误,但我只能猜测,因为没有提供链接。我认为缺少的部分是,如果该站点需要人类移动鼠标,那么您必须告诉 Selenium 也这样做。
  • 如果您没有提供指向该站点的链接或 HTML 或任何代码,则很难做很多事情。

标签: c# selenium selenium-webdriver


【解决方案1】:

安德鲁是对的。如果它不是手动发生的,那么它也不应该在这里发生。

您也可以尝试使用JavascriptExecutor点击

WebElement element= driver.findElement(By.xpath("Your Xpath"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);

以下是一些使用 C# 的示例

Execute JavaScript using Selenium WebDriver in C#

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    我仍然不知道真正的解决方案,但这是我正在使用的肮脏解决方法:

    public static void Click(this IWebElement element, TestTarget target)
    {
        if (target.IsInternetExplorer)
        {
            var actions = new Actions(target.Driver);
            actions.MoveToElement(element).Perform();
            Thread.Sleep(500); // wait for the mouseover popup to appear
            element.SendKeys(Keys.Escape); // to close the popup (if any)
            actions.MoveToElement(element).DoubleClick().Perform(); // simple click is sometimes not enough in IE
        }
        else
        {
            element.Click();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多