C# Selenium click方法正在执行,然后超时

C# Selenium click方法正在执行,然后超时,c#,selenium,selenium-webdriver,selenium-chromedriver,webdriverwait,C#,Selenium,Selenium Webdriver,Selenium Chromedriver,Webdriverwait,我正在使用SeleniumWebDriver运行自动化测试。我的一个测试打开一个登录页面,输入凭证并单击登录按钮。当我在本地运行它时,我可以看到它已成功登录到站点,但是我的测试在click方法上抛出了一个错误,即使我看到它移动到下一页。我也在使用Chrome驱动程序 错误上的文字显示: OpenQA.Selenium.WebDriverException:'对远程服务器的HTTP请求 URL的WebDriver服务器在之后超时 60秒 内部异常WebException:请求已中止:操作 已超时

我正在使用SeleniumWebDriver运行自动化测试。我的一个测试打开一个登录页面,输入凭证并单击登录按钮。当我在本地运行它时,我可以看到它已成功登录到站点,但是我的测试在click方法上抛出了一个错误,即使我看到它移动到下一页。我也在使用Chrome驱动程序

错误上的文字显示:

OpenQA.Selenium.WebDriverException:'对远程服务器的HTTP请求 URL的WebDriver服务器在之后超时 60秒

内部异常WebException:请求已中止:操作 已超时

这是我用来定位元素并单击它的代码:

private IWebElement LoginButton => Wait.Until(d => Driver.FindElementByCssSelector(".btn"));

private void ClickLoginButton()
{                               
    LoginButton.Click();
}

其他站点的其他单击方法工作正常,我似乎只看到此按钮出现此错误。

当Selenium执行
click()
时,它将尝试等待页面加载。从

Click()方法将尝试阻止,直到页面加载完毕

如果
IWebDriver
没有收到此指示(
document.readyState
如果内存可用),它将以
WebDriverException
结束

没有任何“漂亮”的解决方案。一个选项是在驱动程序初始化中设置
ChromeOption

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddAdditionalCapability("pageLoadStrategy","none");
IWebDriver driver = new ChromeDriver(chromeOptions);
但这将影响所有测试

另一个选项是在此特定按钮中捕获
WebDriverTimeoutException

private void ClickLoginButton()
{
    try
    {
        driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(1));    
        LoginButton.Click();
    }
    catch (WebDriverTimeoutException) { }
    finally
    {
        driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(originalTime));
    }
}
我也有同样的问题: 向远程WebDriver服务器发出的URLHTTP请求在60秒后超时

在ChromeDriver构造函数中指定超时在我的场景中很有帮助

            /// <summary>
    /// Initializes a new instance of the <see cref="ChromeDriver"/> class using the specified path
    /// to the directory containing ChromeDriver.exe, options, and command timeout.
    /// </summary>
    /// <param name="chromeDriverDirectory">The full path to the directory containing ChromeDriver.exe.</param>
    /// <param name="options">The <see cref="ChromeOptions"/> to be used with the Chrome driver.</param>
    /// <param name="commandTimeout">The maximum amount of time to wait for each command.</param>
    public ChromeDriver(string chromeDriverDirectory, ChromeOptions options, TimeSpan commandTimeout)
        : this(ChromeDriverService.CreateDefaultService(chromeDriverDirectory), options, commandTimeout)
    {
    }
//
///使用指定的路径初始化类的新实例
///到包含ChromeDriver.exe、选项和命令超时的目录。
/// 
///包含ChromeDriver.exe的目录的完整路径。
///将与Chrome驱动程序一起使用。
///等待每个命令的最长时间。
公共ChromeDriver(字符串ChromeDriver目录、ChromeOptions选项、TimeSpan命令超时)
:此(ChromeDriverService.CreateDefaultService(chromeDriverDirectory)、选项、命令超时)
{
}

你的
chromedriver
和浏览器版本是什么?@guy Chrome浏览器版本是68.0.3440.106,chromedriver是2.41浏览器已导航到下一页,但如果仔细查看,该页仍在浏览器中加载。这有很多潜在的原因。。。互联网速度慢,页面或web服务器出现问题,等等。这种情况持续发生吗?手动执行场景时是否会发生这种情况?你有权访问开发人员吗?如果是这样,请询问他们为什么会发生这种情况,也许他们可以调查并找到修复方法。您的意思是将页面加载超时设置为1s吗?在这种情况下,您似乎会将其设置为高于60秒。@JeffC单击将导航到下一页,OP可以看到它。如果它在60秒内没有被拖走,它可能不会被加载更长的时间,所以等待60秒也没有意义。是的,但是1秒呢?即使在一个精心设计的站点/页面上,这也几乎肯定会失败。不管怎样,这都不能真正解决问题。它只是失败得更快。。。在许多情况下,很可能会出现误报。@JeffC我说过这个解决方案是针对我们知道有问题的这个按钮。这个按钮是登录按钮。我想它会被大量使用。使其立即(1s)失效并不是问题的真正解决方案,是吗?