从 chrome 85 开始,偶尔出现 Selenium Chrome WebDriver 超时

问题描述 投票:0回答:2

我有一些使用 Selenium 并在 Chrome 上运行的 .NET Core 自动化项目。构建在 Jenkins 管道中运行,当前在 Linux 构建代理上运行测试。

当我们在 chrome 83 上运行时,这些测试都运行得很好,但是当我们让我们的开发团队升级到 chrome 85 时,我们开始看到零星的超时。当发生超时时,我们会在每个测试中看到以下错误:

Error Message:
OneTimeSetUp: OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:41307/session/008798b4a2c52b867ec157b20d89f9b9/url timed out after 60 seconds.
    ----> System.Threading.Tasks.TaskCanceledException : The operation was canceled.
    ----> System.IO.IOException : Unable to read data from the transport connection: Operation canceled.
    ----> System.Net.Sockets.SocketException : Operation canceled

此超时并非孤立于单个测试,但如果发生,则测试运行中的每个测试都会出现相同的错误消息。

平均每运行 2-3 次测试就会发生这种情况。这不是时间问题,因为有时计划的运行成功,有时失败,我可以一遍又一遍地运行测试,背靠背,并且会随机混合成功和失败。

到目前为止我尝试过的:

  • 在 Windows 代理而不是 Linux 代理上运行(由于超时而失败的情况更常见,几乎 100% 的时间)
  • 增加超时(一直到 10 分钟,但我们仍然看到完全相同的行为)
  • 将 chrome/chromedriver 升级到 86,仍然看到相同的行为
  • 尝试使用 Selenium 4.0 beta 包

还值得注意的是,我们还没有在通过 Visual Studio 本地运行时看到这种情况发生。只有当通过我们的 Jenkins 管道执行这些测试时,我们才会看到这种行为。

关于如何解决这些随机超时失败有什么想法吗?

编辑:

添加我用来初始化 chromedriver 的代码:

var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments("--no-sandbox", "--start-maximized");
chromeOptions.AddArguments("--window-size=1920,1080", "--headless"); // Comment out if running locally to see execution
chromeOptions.AddUserProfilePreference("safebrowsing.enabled", "true");
WebDriver = new ChromeDriver(chromeOptions);

我们运行的服务器是无头的,但我保留了启动最大化标志,以便于本地调试。

编辑2:

这是在利用 webDriver 的 OneTimeSetUp 方法中执行的其余代码:

public LoginService(IWebDriver webDriver)
{
    _webDriver = webDriver;
}

public void OpenAndLoginToApplication(string applicationUrl, string username, string password)
{
    _webDriver.Navigate().GoToUrl(string.Format(LoginPageUrlTemplate, applicationUrl));

    _webDriver.SetInputFieldValue(By.Id(UsernameFieldId), InputFieldType.Text, username);
    _webDriver.SetInputFieldValue(By.Id(PasswordFieldId), InputFieldType.Text, password);

    _webDriver.ClickAndConfirmByElementVisibility(By.Id(LoginButtonId), By.Id(LoggedInUserDropdownId));
}
c# selenium selenium-webdriver .net-core selenium-chromedriver
2个回答
1
投票

我一直无法弄清楚为什么会发生这种情况,但我能够解决这个问题。

我发现 Navigate() 到应用程序时发生超时。无论我增加多少超时,我仍然会失败。但是,后续的 Navigate() 调用将会成功。

因此,我的解决方案是,如果我们在初始调用时收到 WebDriverException(超时异常),只需重试导航到应用程序 url。


-2
投票

@Belizzle 我爱你,你的解决方案是唯一对我有帮助的解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.