5

我正在用 c# 编写集成测试,当我在对话框内的某些元素上使用 click() 方法时,没有任何反应,也没有错误。它将单击对话框内的某些元素,但不会单击其他元素。我想如果它没有正确选择它们,那么它会抛出异常,但它运行顺利并且说测试通过了,即使它从未真正点击过按钮。该对话框是一个 iframe。

我想也许它试图点击一个尚未显示或启用的按钮,所以我在 click() 调用之前添加了这个:

 _driver.SwitchTo().Frame(_frameElement);
     _wait.Until(d =>
    {
      var shippingInfoButton = d.FindElement(By.CssSelector("input[title ='Info']"));
      return shippingInfoButton.Displayed && shippingInfoButton.Enabled;
    });
       var infoButton = _driver.FindElement(By.CssSelector("input[title ='Info']"));
        ScrollToElement(infoButton);
        infoButton.Click();

再次运行,没有抛出异常,所以我假设它已经找到了元素并且它被显示和启用。

如果您需要更多信息,请告诉我。谢谢

4

3 回答 3

8

我无法解释为什么 selenium 驱动程序 .click() 方法不会在页面中的某些元素上触发,但在其他元素上不会触发,但我确实找到了解决方案。

使用 IJavaScriptExecutor 您可以使用 javascript 单击元素,在我的情况下它可以工作。

这是运行 IJavaScriptExecutor 的代码,下面是我的整个方法。

    //IJavaScriptExecutor
    IJavaScriptExecutor js = _driver as IJavaScriptExecutor;

         js.ExecuteScript("arguments[0].click();", infoButton);

    //my whole method for clicking the button and returning the page object
    public ShippingMethodDetailsPageObject SelectShippingMethodInfo()
    {
        _driver.SwitchTo().Frame(_frameElement);
        _wait.Until(d =>
        {
         var shippingInfoButton = d.FindElement(By.CssSelector("input[title='Info']"));
            return shippingInfoButton.Displayed && shippingInfoButton.Enabled;
        });

         var infoButton = _driver.FindElement(By.CssSelector("input[title ='Info']"));
         IJavaScriptExecutor js = _driver as IJavaScriptExecutor;

         js.ExecuteScript("arguments[0].click();", infoButton);
        _driver.SwitchTo().DefaultContent();

        return new ShippingMethodDetailsPageObject(_driver, false);
    }
于 2013-06-17T14:06:25.480 回答
4

我遇到了类似的问题。如果是同样的问题,ChromeDriver 有问题,由于周围的 div 等原因,它无法单击某些元素。真的有点蹩脚。

一个简单的解决方法是发送 Enter 键,例如 element.SendKeys(Keys.Enter)。似乎适用于所有浏览器。

于 2013-08-29T09:25:45.613 回答
0

我有一些在 Firefox 中一直有效的测试,在 Chrome 中它让我发疯,因为有时它成功通过,有时“.click”不起作用,它会通过测试。

花了很长时间才注意到它,但原因是:我曾经有时将浏览器最小化到 80%,以便能够在我的 IDE 旁边看到浏览器。当我这样做时,似乎“.click”不起作用。

至少对我来说这是个问题

于 2017-08-04T09:24:26.750 回答