В ходе разработки тестов столкнулся с такой проблемой:
Есть набор тестов - запускается пока только в Файрфоксе. Локально он проходит - все тесты в статусе passed.
При запуске этого же набора тестов на Teamcity сервере - очень часто (а самое главное случайно) получаю ошибки двух типов:
1. OpenQA.Selenium.WebDriverException: Unexpected error. System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 127.0.0.1:7055 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
2. OpenQA.Selenium.WebDriverException: No response from server for url http://localhost:7055/hub/session/dc89c1ae-3099-4886-88f7-58740cb8ed68/element/%7Bdc88d043-4ed3-4196-9baa-86317f47882e%7D/name
Вопрос к форумчанам - сталкивались ли Вы с такого рода ошибками и как их преодолеть?
Народ походу жалуется на совместимость версий WebDriver-а и Firefox. Тут уже нужно смотреть, насколько свежая версия браузера и насколько свежая версия драйвера.
Если учесть, что такая ошибка возникает не всегда, а относительно спонтанно, то имеет смысл проверить еще несколько вещей. Например:
Удостоверьтесь, что каждый тест по завершении вызывает метод драйвера quit. Точнее, количество инициализаций ВебДрайвера совпадает с количеством его закрытий. Учитывая, что используется SpecFlow, это вполне вероятный случай. В хуках такую инструкцию добавить нетрудно
По умолчанию TeamCity запускает тесты под системным процессом. Соответственно, если вам надо максимально приблизить условия работы на удаленной машине к условиям на вашей локальной машине, то надо бы позаботиться, чтоб TeamCity агент запускал ваши тесты не под системным процессом, а под конкретным пользователем, опции которого можно настроить. Это не сильно принципиально, но ряд вещей позволит упростить (особенно, если вы потом захотите запускать тесты под ИЕ, например).
Насчет обновления версий Селениума и ФайрФокса - сегодня обновлю и отпишусь решилась ли проблема или нет.
Насчет того, чтобы после каждого теста вызывать метод quit - нужно ли это делать и насколько это целесообразно? Плюс в этом - отсутствие приведенных мной выше ошибок, минус - увеличение времени выполнения тестов.
На данный момент я делаю quit() после всего тест рана.
В принципе на основе хуков в Спекфлоу легко можно сделать так, чтобы только в случае фейла теста выполнялся quit() и драйвер инициализировался заново.
В интенсивности использования quit важно как минимум, чтобы количество вызовов quit совпадало с количеством инициализаций Веб Драйвера. Я предпочитаю такую остановку делать после каждого теста. Больших потерь времени от этого нет, а если это еще и позволит избавиться от ряда проблем, то почему бы и не воспользоваться этим.