Chromedriver продолжает терять соединение сразу после начала теста на селен - PullRequest
0 голосов
/ 22 января 2020

У меня тест на селен для одностраничного веб-приложения. Когда я запускаю тест, он запускается chrome, переходит к нужному URL и открывает браузер. Но это в значительной степени так. Сразу после этих шагов он просто показывает страницу нужного URL-адреса, пока тест не завершится неудачей из-за тайм-аута:

The HTTP request to the remote WebDriver server for URL http://localhost:59833/session/9b0d7ae349643a68d86bf8ce2ef419ee/element/18f73f99-48e6-4fa9-81a8-d77d3d6ff80c/click timed out after 60 seconds.
  ----> System.Net.WebException : The request was aborted: The operation has timed out.

Call stack:
at OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary`2 parameters)
   at MyTest.Pages.Login..ctor() in D:\Path\To\Test\Project\Pages\Login.cs:line 30
   at TearDown.SetUp()

Мне кажется, что только определенные c действия вызывают эту проблему. Например, если я наведу курсор на тело страницы и нажму там, мой тест будет выполняться до определенного тестового случая, а затем потеряет соединение, даже если все тестовые примеры, которые выполнялись ранее, проходили точно такой же код для перезагрузки стороны.

Такое же точное поведение происходит, когда я инициализирую хромедривер с опцией * 1006. *

У меня уже была та же самая проблема несколько недель go, но "исправление" genuis, похоже, было началом теста и ничего не трогайте (не двигайте мышью, не нажимайте клавиши на клавиатуре), пока это не будет сделано. Это больше не работает и явно не является окончательным решением, так как тест должен автоматически запускаться на сервере сборки.

Я понятия не имею, что еще делать. Вот что я уже пробовал:

  • Посоветуйте WebDriver щелкнуть элемент «body» на странице: Driver.FindElement(By.TagName("body")).Click();
  • Выполните несколько JavaScript, чтобы сфокусировать браузер ((IJavaScriptExecutor)driver).ExecuteScript("window.focus();");
  • Инициализирует WebDriver с различными аргументами, такими как "--no-sandbox", "--disable-gpu", "ignore-certificate-errors", "--headless"

У кого-нибудь была такая же проблема или какое-либо представление о том, как чтобы исправить это?

Если требуется больше моего кода, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ

Проблемы происходит со следующим кодом:

SharedResources.Resources.DefaultTimeout = General.TIMEOUT_IN_MILLISECONDS;
SharedResources.Resources.ScreenShotTaken += OnScreenshotTaken;

// login to the web app to invoke the web api which takes a second to initialize on first use. This is where the problem actually occurs
Login().DoLoginByClickLoginButton(SharedResources.Resources.AdminUser.Username, SharedResources.Resources.AdminUser.Password);
Thread.Sleep(10000);

Конструктор Login выглядит следующим образом:

public Login()
{
    Driver.Navigate().GoToUrl(General.MAIN_URL);
    Driver.Navigate().Refresh();
    Driver.Manage().Window.Maximize();
    Toolbox.AwaitElementVisible(By.Id(BUTTON_LOGIN_ID), General.TIMEOUT_IN_MILLISECONDS);
    Driver.FindElement(By.TagName("body")).Click(); // This line is the one mentioned in the call stack
}

КАК Я УСТАНОВИЛ ВЕБДРИВЕР

var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--no-sandbox");
chromeOptions.AddArgument("--window-size=1920,1200");
chromeOptions.UnhandledPromptBehavior = UnhandledPromptBehavior.Accept;

this.WebDriver = new ChromeDriver(ChromeDriverService.CreateDefaultService(Environment.GetEnvironmentVariable("WebDrivers")), chromeOptions);

1 Ответ

0 голосов
/ 12 февраля 2020

Если кто-то имеет дело с той же проблемой, я нашел решение в понижении ChromeDriver до 2.40.0 (почти на 20 версий ниже той, которую я использовал до 79.0.3945.3600)

Конечно, это не лучшее решение, но теперь я могу, по крайней мере, без проблем выполнять свои тесты.

...