2014-11-20 2 views
0

Тесты на основе WebDriver для нашего веб-приложения требуют одновременного открытия нескольких окон браузера: один открывает портал, ориентированный на потребителя, другой открывает портал администратора (чтобы гарантировать, что изменения в одном из них видно в другом). Это делается путем создания двух отдельных объектов WebDriver: например,C# + VisualStudio + Несколько экземпляров WebDriver = SocketExceptions

IWebDriver driver1 = DriverFactory.NewChromeDriver(); 
IWebDriver driver2 = DriverFactory.NewChromeDriver(); 

Тест может иметь доступ к обеим WebDrivers по желанию. Наши тесты указаны в SpecFlow и реализованы как случаи MSTest. Тесты разработаны в VisualStudio 2013 Premium, а драйверы просто используют экземпляр ChromeDriver на локальной машине. Все хорошо и хорошо.

Когда тест выполняет некоторые действия в Driver2 (скажем, входит в систему), а затем возвращается к Driver1, я получаю исключение SocketException, потому что localhost активно отказывается от соединения. Брандмауэру Windows было предложено разрешить приложение на всех портах, фабрика настроит прокси правильно. Точная трассировка стека:

System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:50467 
Result StackTrace: 
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) 

Firefox открывает один браузер, а затем сдается. IE не может даже НАЙТИ браузер, когда открыто несколько окон.

(я никогда не имел эту проблему, пока я не установил последние обновления для VS2013 ....)

Любые идеи? Спасибо команде.

+1

UPDATE: похоже, эта проблема возникает только при попытке проверить элемент, который не находится в DOM, или при попытке проверить атрибут для элемента, который не существует. По какой-то причине это не бросает исключение NoSuchElementException .... – Smoke

ответ

0

Понятно, что Selenium действительно может вызывать исключение WebDriver, если элемент отсутствует в DOM. В конце концов, мне пришлось обернуть мой код доступа в try-catch: если исключение WebDriver обертывает WebException, которое обертывает SocketException, а SocketErrorCode SocketException - ConnectionRefused, это означает, что элемент действительно отсутствует в DOM.

Смежные вопросы