У меня тест на селен для одностраничного веб-приложения. Когда я запускаю тест, он запускается 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);