Selenium chrome驱动程序click()方法并不总是单击元素

Mit*_*tch 4 c# selenium integration-testing

我在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();
Run Code Online (Sandbox Code Playgroud)

再次,这运行没有抛出异常,所以我假设它已找到元素,它显示和启用.

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

Mit*_*tch 6

我无法解释为什么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);
    }
Run Code Online (Sandbox Code Playgroud)