Я использую Selenium в течение нескольких месяцев, который мы используем для автоматизации некоторых наших внутренних процессов тестирования. Скрипты проходят нормально. Недавно я обновился до C # 2.40.0 webdriver, используя FF 27.01, и наши скрипты теперь дают сбой в случайных местах со следующей ошибкой.
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
at System.Net.HttpWebRequest.GetResponse()
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
at Portal.Test.Helpers.Setup.CloseWebdriver()
at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
at System.Net.HttpWebRequest.GetResponse()
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
Последняя ошибка, которую мне удалось отследить до одной строчки кода:
_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();
Раздражает то, что попытка решить проблему оказывается сложной, как будто я запускаю тест на своем локальном компьютере, при отладке он проходит. Кроме того, если я запускаю его через бегун NUNIT на машине сборки, на которой я запускаю тест, он также проходит. Это только кажется ошибкой как часть нашего автоматизированного процесса сборки при использовании Teamcity. Как я уже сказал, это работало нормально в течение нескольких месяцев назад, и единственное, что изменилось, - это комплект selenium webdriver.
Я сталкивался с этой проблемой раньше, во время отладки и когда вызывалась Click()
строка кода, Firefox, казалось, зависал, и только остановка теста позволила Firefox продолжить. Здесь есть ряд предложений, включая изменение исходного кода webdriver? Я бы не хотел идти по этому пути, если возможно, если кто-то еще может предложить какие-либо предложения.
Ответы:
У меня была аналогичная проблема с использованием драйвера Chrome (v2.23) / запуска тестов через TeamCity. Мне удалось решить эту проблему, добавив флаг "без песочницы" в параметры Chrome:
var options = new ChromeOptions(); options.AddArgument("no-sandbox");
Не уверен, есть ли аналогичный вариант для драйвера FF. Насколько я понимаю, проблема связана с тем, что TeamCity запускает Selenium под учетной записью SYSTEM.
источник
var options = new ChromeOptions(); options.AddArgument("--no-sandbox");
работает сейчас в C # версии Webdriver 3.14.new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));
Запустите браузер, используя приведенные выше строки кода. У меня это сработало.
источник
Я впервые столкнулся с этой проблемой несколько месяцев назад (также в
click()
команде), и с тех пор это проблема для меня. Кажется, это какая-то проблема с привязками .NET Selenium. Это сообщение в блоге парня, который работает с драйвером IE, помогает объяснить, что происходит:http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html
К сожалению, настоящего решения этой проблемы не существует. Всякий раз, когда этот вопрос поднимался перед разработчиками Selenium ( см. Здесь ), это был типичный ответ :
Если вы можете отправить постоянно воспроизводимый тестовый пример, это может быть очень полезно для того, чтобы навсегда избавиться от этой ошибки.
Тем не менее, возможно, вы пока можете попробовать этот обходной путь. Если кнопка HTML, которую вы пытаетесь использовать,
click()
имеетonclick
атрибут, содержащий Javascript, рассмотрите возможность использования JavascriptExecutor для непосредственного выполнения этого кода, а не для вызоваclick()
команды. Я обнаружил, что выполнениеonclick
Javascript напрямую позволяет пройти некоторые из моих тестов.источник
Была такая же проблема с Firefox. Я переключился на Chrome с опциями, и с тех пор все в порядке.
ChromeOptions options = new ChromeOptions(); options.AddArgument("no-sandbox"); ChromeDriver driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3)); driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));
источник
В моем случае, тип моей кнопки это
submit
неbutton
я изменитьClick
кSumbit
потом каждый хорошо работать. Что-то вроде ниже,из
driver.FindElement(By.Id("btnLogin")).Click();
к
driver.FindElement(By.Id("btnLogin")).Submit();
Кстати, я попробовал все ответы в этом посте, но у меня это не сработало.
источник
Получил аналогичную проблему. Попробуйте установить больше времени в конструкторе драйвера - добавьте, например.
var timespan = TimeSpan.FromMinutes(3); var driver = new FirefoxDriver(binary, profile, timeSpan);
источник
driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
driver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
Я думаю, что эта проблема возникает, когда вы пытаетесь получить доступ к объекту веб-драйвера после
1) окно закрылось, а вы еще не перешли на родительский
2) вы переключились на окно, которое было не совсем готово и обновлялось с тех пор, как вы переключились
ожидание того,
windowhandles.count
что вы ожидаете, не принимает во внимание содержимое страницы, как и document.ready. Я все еще ищу решение этой проблемыисточник
В моем случае это потому, что я удалил папку обновления Chrome. После переустановки хрома он работает нормально.
источник
Проблема в том, что оценка
Click()
тайм-аута в вашей среде сборки ... вы можете захотеть разобраться, что происходит вClick()
.Также попробуйте добавить Retrys для,
Click()
потому что иногда оценки занимают больше времени в зависимости от скорости сети и т. Д.источник
В моем случае я обнаружил, что эта ошибка возникает на сервере сборки нашей команды. Тесты работали на наших локальных машинах разработчиков.
Проблема заключалась в том, что целевой веб-сайт был неправильно настроен на сервере сборки, поэтому он не мог правильно открыть браузер.
Мы использовали драйвер Chrome, но я не уверен, что это имеет значение.
источник
В моем случае проблема была в SendKeys () и удаленном рабочем столе . Публикация обходного пути, который у меня есть:
источник
изменение Selenium.WebDriver.ChromeDriver с 2.40.0 на 2.27.0 для меня нормально
источник
Это
new FirefoxDriver(binary, profile, timeSpan)
было устаревшим.Теперь вы можете использовать
new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)
вместо него.Также есть
new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)
и он работает. Но это недокументировано, и вам нужно указать вручную,geckoDriverDirectory
даже если он уже вPath
.источник
У нас была такая же проблема. В нашем случае браузер был заблокирован всплывающим окном входа в систему (проверка подлинности Windows), поэтому не возвращался через 60 секунд. Добавление правильных прав доступа к учетной записи Windows, под которой работал Chrome, решило проблему.
источник
А-а-а! Столкнулся с этим в macOS сегодня, и проблема была очень простой - всплывающее окно с предложением установить новую версию Appium отображалось на удаленном сервере сборки CI.
Просто подключившись к нему с помощью VNC и нажав « Установить позже », он исправился.
источник
В моем случае ни один из приведенных выше ответов не решил мою проблему полностью. В итоге я использовал режим (
no-sandbox
), соединение с расширенным периодом ожидания (driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));
) и таймаут загрузки страницы (driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));
), поэтому теперь мой код выглядит так:public IWebDriver GetRemoteChromeDriver(string downloadPath) { ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.AddArguments( "start-maximized", "enable-automation", "--headless", "--no-sandbox", //this is the relevant other arguments came from solving other issues "--disable-infobars", "--disable-dev-shm-usage", "--disable-browser-side-navigation", "--disable-gpu", "--ignore-certificate-errors"); capability = chromeOptions.ToCapabilities(); SetRemoteWebDriver(); SetImplicitlyWait(); Thread.Sleep(TimeSpan.FromSeconds(2)); return driver; } private void SetImplicitlyWait() { driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30)); } private void SetRemoteWebDriver() { driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3)); }
Но, как я уже упоминал, ни один из вышеперечисленных методов не решил мою проблему, я постоянно получал ошибку, и было активным несколько процессов chromedriver.exe и chrome.exe (~ 10 из chromedriver и ~ 50 из chrome).
Итак, где-то я читал, что после удаления драйвера мне следует подождать несколько секунд, прежде чем начинать следующий тест, поэтому я добавил следующую строку для удаления метода:
driver?.Quit(); driver?.Dispose(); Thread.Sleep(3000);
С этой модификацией сна я больше не получаю ошибку тайм-аута, и нет ненужных открытых процессов chromedriver.exe и chrome.exe.
Надеюсь, я так долго помогал кому-то, кто борется с этой проблемой.
источник
У меня было такое же исключение при попытке запустить ChromeDriver без головы с запланированной задачей на сервере Windows (без присмотра). Для меня это решило запуск задачи от имени пользователя « Администраторы » (обратите внимание на букву S в конце). То, что я тоже сделал (не знаю, актуально ли это), выбрал «Любое соединение» на вкладке «Условия» задачи.
источник
Для ChromeDriver у меня сработало следующее:
string chromeDriverDirectory = "C:\\temp\\2.37"; var options = new ChromeOptions(); options.AddArgument("-no-sandbox"); driver = new ChromeDriver(chromeDriverDirectory, options, TimeSpan.FromMinutes(2));
Selenium версии 3.11, ChromeDriver 2.37
источник