Ошибка Selenium - HTTP-запрос к удаленному WebDriver истек через 60 секунд.

85

Я использую 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? Я бы не хотел идти по этому пути, если возможно, если кто-то еще может предложить какие-либо предложения.

Натан
источник
У нас была точно такая же проблема в нескольких независимых проектах, использующих эту настройку, и до сих пор нет решения для этого. Лучше всего было перейти на более ранние версии сборок WebDriver и Firefox. Мы также не знаем, вызвано ли это поведение WebDriver или Firefox.
Dio F

Ответы:

23

У меня была аналогичная проблема с использованием драйвера Chrome (v2.23) / запуска тестов через TeamCity. Мне удалось решить эту проблему, добавив флаг "без песочницы" в параметры Chrome:

var options = new ChromeOptions();
options.AddArgument("no-sandbox");

Не уверен, есть ли аналогичный вариант для драйвера FF. Насколько я понимаю, проблема связана с тем, что TeamCity запускает Selenium под учетной записью SYSTEM.

бойc2
источник
это тоже решает мою проблему. Я не мог больше запускать хром-тесты после нескольких месяцев, когда не пробовал их. Спасибо, combatc2
Этьен
1
Мой код работал нормально в окружении, размещенном в IIS, и внезапно останавливался, но все еще работал в моих модульных тестах. Добавление этой строки заставило ее снова работать в IIS env. Благодаря!
Legends
1
Я решил, что это var options = new ChromeOptions(); options.AddArgument("--no-sandbox");работает сейчас в C # версии Webdriver 3.14.
moto_geek
20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

Запустите браузер, используя приведенные выше строки кода. У меня это сработало.

user2298124
источник
Исправлено и для нас. При запуске базового сценария, который только что создал драйвер FF и ничего больше, 60-секундный тайм-аут работал в 100% случаев. При запуске нашего ресурсоемкого скрипта, который открывает соединения с базами данных / читает / пишет / делает намного больше непосредственно перед открытием FF, тайм-аут 60 будет вызывать сбои примерно в 50% случаев. Увеличение таймаута до 3 минут устранило проблему. Похоже, Webdriver просто нужно немного больше времени, чтобы прогреть двигатель.
KayakinKoder
13

Я впервые столкнулся с этой проблемой несколько месяцев назад (также в click()команде), и с тех пор это проблема для меня. Кажется, это какая-то проблема с привязками .NET Selenium. Это сообщение в блоге парня, который работает с драйвером IE, помогает объяснить, что происходит:

http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html

К сожалению, настоящего решения этой проблемы не существует. Всякий раз, когда этот вопрос поднимался перед разработчиками Selenium ( см. Здесь ), это был типичный ответ :

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

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

Тем не менее, возможно, вы пока можете попробовать этот обходной путь. Если кнопка HTML, которую вы пытаетесь использовать, click()имеет onclickатрибут, содержащий Javascript, рассмотрите возможность использования JavascriptExecutor для непосредственного выполнения этого кода, а не для вызова click()команды. Я обнаружил, что выполнение onclickJavascript напрямую позволяет пройти некоторые из моих тестов.

Дэниел Чарльз
источник
9

Была такая же проблема с 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));
Лаваль
источник
Скорее всего, я ошибаюсь здесь, но похоже, что последняя строчка не подействует. PageLoad - это сам TimeSpan, а .Add on TimeSpan - это чистая функция, которая не изменяет PageLoad, а просто возвращает новый TimeSpan, который отбрасывается.
Джейсон Ричи
3

В моем случае, тип моей кнопки это submitне buttonя изменить ClickкSumbit потом каждый хорошо работать. Что-то вроде ниже,

из driver.FindElement(By.Id("btnLogin")).Click();

к driver.FindElement(By.Id("btnLogin")).Submit();

Кстати, я попробовал все ответы в этом посте, но у меня это не сработало.

MichaelMao
источник
3

Получил аналогичную проблему. Попробуйте установить больше времени в конструкторе драйвера - добавьте, например.

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);
Барт Войтала
источник
Привет, привет, это будет в формате, как показано ниже? driver.Manage (). Таймауты (). ImplicitlyWait (TimeSpan.FromSeconds (5));
Nathan
4
Нет, не это ожидание ImplicitlyWait связано с поиском элементов. Вам нужно изменить тайм-аут драйвера по умолчанию (60 секунд), когда он ожидает обработки запроса (если я не ошибаюсь). В любом случае вам нужно найти строку, в которой вы устанавливаете конструктор драйвера FF и добавить туда дополнительные атрибуты или изменить время ожидания. Что-то вроде:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Барт Войтала
2
для ChromeDriver это выглядело бы такdriver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510 04
2

Я думаю, что эта проблема возникает, когда вы пытаетесь получить доступ к объекту веб-драйвера после

1) окно закрылось, а вы еще не перешли на родительский

2) вы переключились на окно, которое было не совсем готово и обновлялось с тех пор, как вы переключились

ожидание того, windowhandles.countчто вы ожидаете, не принимает во внимание содержимое страницы, как и document.ready. Я все еще ищу решение этой проблемы

ребро
источник
2

В моем случае это потому, что я удалил папку обновления Chrome. После переустановки хрома он работает нормально.

gary.zhang
источник
1

Проблема в том, что оценка Click()тайм-аута в вашей среде сборки ... вы можете захотеть разобраться, что происходит в Click().

Также попробуйте добавить Retrys для, Click()потому что иногда оценки занимают больше времени в зависимости от скорости сети и т. Д.

немного
источник
Привет! Опция повтора не работает, так как браузер просто зависает. Только остановка теста позволяет браузеру продолжить работу.
Натан
1

В моем случае я обнаружил, что эта ошибка возникает на сервере сборки нашей команды. Тесты работали на наших локальных машинах разработчиков.

Проблема заключалась в том, что целевой веб-сайт был неправильно настроен на сервере сборки, поэтому он не мог правильно открыть браузер.

Мы использовали драйвер Chrome, но я не уверен, что это имеет значение.

Шон Томлинс
источник
1

В моем случае проблема была в SendKeys () и удаленном рабочем столе . Публикация обходного пути, который у меня есть:

У меня был тест Selenium, который не удался при запуске в рамках задания Jenkins на узле, размещенном в vSphere и управляемом через RDP. После некоторого устранения неполадок выяснилось, что это удается, если удаленный рабочий стол подключен и сфокусирован, но не работает, за исключением случаев, когда удаленный рабочий стол отключен или даже свернут.

В качестве обходного пути я вошел через vSphere Console вместо RDP, и даже после закрытия vSphere тест больше не терпел неудачу. Это обходной путь, но я должен быть осторожен, никогда не входить в систему через RDP и всегда администрировать только через vSphere Console.

сашоальм
источник
0

изменение Selenium.WebDriver.ChromeDriver с 2.40.0 на 2.27.0 для меня нормально

Джон Ляо
источник
0

Это new FirefoxDriver(binary, profile, timeSpan)было устаревшим.

Теперь вы можете использовать new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)вместо него.

Также есть new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)и он работает. Но это недокументировано, и вам нужно указать вручную, geckoDriverDirectoryдаже если он уже в Path.

imba-tjd
источник
0

У нас была такая же проблема. В нашем случае браузер был заблокирован всплывающим окном входа в систему (проверка подлинности Windows), поэтому не возвращался через 60 секунд. Добавление правильных прав доступа к учетной записи Windows, под которой работал Chrome, решило проблему.

Рогир ван Хет Шип
источник
0

А-а-а! Столкнулся с этим в macOS сегодня, и проблема была очень простой - всплывающее окно с предложением установить новую версию Appium отображалось на удаленном сервере сборки CI.

Просто подключившись к нему с помощью VNC и нажав « Установить позже », он исправился.

RAM237
источник
0

В моем случае ни один из приведенных выше ответов не решил мою проблему полностью. В итоге я использовал режим ( 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.

Надеюсь, я так долго помогал кому-то, кто борется с этой проблемой.

Тураншкик
источник
0

У меня было такое же исключение при попытке запустить ChromeDriver без головы с запланированной задачей на сервере Windows (без присмотра). Для меня это решило запуск задачи от имени пользователя « Администраторы » (обратите внимание на букву S в конце). То, что я тоже сделал (не знаю, актуально ли это), выбрал «Любое соединение» на вкладке «Условия» задачи.

SubqueryCrunch
источник
-1

Для 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

R2D2
источник