Ответ 1
Найдено следующие обходные пути:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-users/1im-LurjK5s
http://watirmelon.com/2011/10/04/c-avoiding-the-webdriverexception-no-response-from-server-for-url/
Я использую Selenium, С#, NUnit для написания тестов, иногда я становлюсь ниже ошибки: -
OpenQA.Selenium.WebDriverException: нет ответа от сервера для URL-адреса httр://lоcalhost: 7055/концентратор/сессии/8dd13f5c-7ca6-4aa6-В.А.В.С.-f0ff6d940f0a/элемент
Вот трассировка стека:
OpenQA.Selenium.WebDriverException: нет ответа от сервера для URL-адреса httр://локальный: 7055/концентратору/сессия/8dd13f5c-7ca6-4aa6-В.А.В.С.-f0ff6d940f0a/элемент в OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest запрос) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Remote\HttpCommandExecutor.cs: линии 115 в OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(команда commandToExecute) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Remote\HttpCommandExecutor.cs: линии 96 на OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Firefox\Внутренние\ExtensionConnection.cs: линия 128 в OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, параметры Dictionary`2) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Remote\RemoteWebDriver.cs: линия 795 в OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String механизм, значение String) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Remote\RemoteWebDriver.cs: линия 836 в OpenQA.Selenium.Remote.RemoteWebDriver.FindElementById(строка id) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Remote\RemoteWebDriver.cs: линия 431 в OpenQA.Selenium.By. < > c__DisplayClass2.b__0 (ISearchContext контекста) в c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\By.cs: строка 102 на OpenQA.Selenium.By.FindElement(контекст ISearchContext) в c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\By.cs: строка 272 на OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by) в C:\Projects\WebDriver\магистральный\DotNet\SRC\WebDriver\Remote\RemoteWebDriver.cs: линия 289 при
. ####. ##. #####. #########. #####. ShareServicesTest.CreateShareWidget()
Код, где появляется эта ошибка:
Driver.SwitchTo().Frame(frameElement);
var wait = new WebDriverWait(parentContextable.Context.Driver, Timeout);
IWebElement element = wait.Until(d => Driver.FindElement(By.TagName(Tags.Body))); // error in this line
Я понял, что эта ошибка может быть выбрана только в этих строках кода реализации Selenium:
private static Response CreateResponse(WebRequest request)
{
Response commandResponse = new Response();
HttpWebResponse webResponse = null;
try
{
webResponse = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
webResponse = (HttpWebResponse)ex.Response;
}
if (webResponse == null)
{
throw new WebDriverException("No response from server for url " + request.RequestUri.AbsoluteUri);
}
else
{ ...
Возможно, кто-то знает, почему request.GetResponse() возвращает null, или если он не работает, почему ex.Response также null?
(09.09.2012) Извините, но, возможно, я не представил всю информацию. Я использую драйвер FireFox, Win7, Selenium 2.25.1. Мой тест терпит неудачу только иногда. Тест в режиме отладки выполняется менее часто, чем в Release.
Здесь я нашел возможные причины, почему это происходит. И если я напишу такой код:
Driver.SwitchTo().Frame(frameElement);
var wait = new WebDriverWait(parentContextable.Context.Driver, Timeout);
Tread.Sleep(250);
IWebElement element = wait.Until(d => Driver.FindElement(By.TagName(Tags.Body)));
Тест проходит нормально. Но Thread.Sleep - плохое решение. Возможно, кто-то может найти другое, немного лучшее решение.
Найдено следующие обходные пути:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-users/1im-LurjK5s
http://watirmelon.com/2011/10/04/c-avoiding-the-webdriverexception-no-response-from-server-for-url/
Вы используете IE? Я получал это, пока не обнаружил, что я могу установить базовый URL через конфигурацию объекта. В противном случае первая страница, на которую вы попадете, - это что-то, сгенерированное Selenium, и, похоже, оно пропускает сигналы для "реального" запроса.
var options = new InternetExplorerOptions()
{
InitialBrowserUrl = _baseUrl,
IntroduceInstabilityByIgnoringProtectedModeSettings = true
};
_driver = new InternetExplorerDriver(_ieDriverServerPath, options);
Я использую это в методе TextFixtureSetup
в своих тестах.
У меня была та же проблема и решить так:
a) избегайте таких методов, как "do wity retry", чтобы манипулировать IWebElements, потому что таким образом тесты требуют много времени для запуска, нет необходимости, и тесты прерываются с перерывами.
b) понизить версию Firefox до 5 (возможно, с FF 3.6 до 6 работает отлично, но новые версии FF вызывают прерывистое исключение, например "Нет ответа от хаба/сеанса..."
c) если вам нужно обрабатывать элементы в тесте, загруженные через Ajax на странице, обязательно предоставите функцию js, которая позволяет остановить загрузку элемента, поэтому вы должны вызвать эту функцию из WebDdriver перед FindElement и do what you want
.