C# Selenium click方法正在执行,然后超时
我正在使用SeleniumWebDriver运行自动化测试。我的一个测试打开一个登录页面,输入凭证并单击登录按钮。当我在本地运行它时,我可以看到它已成功登录到站点,但是我的测试在click方法上抛出了一个错误,即使我看到它移动到下一页。我也在使用Chrome驱动程序 错误上的文字显示: OpenQA.Selenium.WebDriverException:'对远程服务器的HTTP请求 URL的WebDriver服务器在之后超时 60秒 内部异常WebException:请求已中止:操作 已超时 这是我用来定位元素并单击它的代码: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:请求已中止:操作 已超时
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)失效并不是问题的真正解决方案,是吗?