Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

NoSuchElementException: Timed out after 30 seconds для некоторых тестов


(heartwilltell) #1

Исходные данные:
Jenkins ver. 1.544
OS X 10.9
Thucydides сгенереный с архетипа thucydides-simple-archetype версии 0.9.205 использующий selenium server 2.37.1
Firefox 26

Есть несколько классов с тестами. При запуске билда все тесты одного и того же класа всегда фейлятся с такой ошибкой:

org.openqa.selenium.NoSuchElementException: Timed out after 30 seconds. Unable to locate the element: Element is not usable [[FirefoxDriver: firefox on MAC (4203e378-8c75-7049-9256-1b9ba242fc61)] -> id: cmm2lifetime_link] For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html Build info: version: '2.37.1', revision: 'Тут мой идентификар комин', time: '2013-10-21 09:08:07' System info: host: 'HeartwilltelliMac.local', ip: '10.20.10.103', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.1', java.version: '1.7.0_45' Driver info: driver.version: unknown For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html Build info: version: '2.37.1', revision: 'a7c61cbd68657e133ae96672cf995890bad2ee42', time: '2013-10-21 09:08:07' System info: host: 'HeartwilltelliMac.local', ip: '10.20.10.103', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.1', java.version: '1.7.0_45' Driver info: driver.version: unknown

При этом все тесты успешно проходят при запуске из IDE и просто при запуске мейвеном


(heartwilltell) #2

Как понять почему браузер запущеный дженкинсом не находит этот элемент. Менял локаторы, определял по айди нейму css xpath, без толку, результат тот же.


(Дмитрий Жарий) #3

Из стектрейса ошибки понятно только то, что WebDriver почему-то не нашел элемента…

Для поиска проблемы, попробуйте следующее:

Перед строкой кода, которая падает, поставьте временную задержку на несколько секунд. Если в этом случае, тест пройдет (или та строка), то значит, что вебдрайвер не дождался элемента, например, в результате длительной загрузки страницы.

Возможно, сайт использует адаптивную верстку (responsible layout). В таком случае, элемента может и не быть. Для проверки, растените обычный бразурер до маленького размера, например 500 x 300 пикселей, и посмотрите ли элемент существует.


(vmaximv) #4

Неа - это так же может значить, что элемент не видим. Два балла thucydides за подмену понятий.

                @Override
                protected void isLoaded() throws Error {
                        try {
                                element = SmartAjaxElementLocator.super.findElement();
                                if (!isElementUsable(element)) {
                                        throw new NoSuchElementException("Element is not usable " + element.toString());
                                }
                        } catch (NoSuchElementException e) {
                                lastException = e;
                                // Should use JUnit's AssertionError, but it may not be present
                                throw new NoSuchElementError("Unable to locate the element: " + e.getMessage(), e);
                        }
                }

где

        protected boolean isElementUsable(WebElement element) {
                return (element != null) && (element.isDisplayed());
        }

(svim) #5

Тесты запускаете используя виртуальный xvfb-экран?


(heartwilltell) #6

Очевидно что да, не совсем понимаю как это. В дженкинсе все дефолтные настройки. Тесты проходят на моей машине в фоне, не мешая моей работе.
Начал гуглить в сторону Xvfb и Seleniumи наткнулся на множество подобных тем на стаке, пока изучаю.


(svim) #7

Как вариант, это и может быть вашей проблемой. На искуственном экране, элементы иногда не отрисовываются, сталкивался с таким пару раз. Попробуйте запустить их, без виртуального экрана(уберите галочку в настройках job’a), если отработает удачно, проблема будет выявлена ; -)


(heartwilltell) #8

У меня не стоит плагин в дженкинсе для Xvfb, тесты запускаются на моем маке не от имени моего пользователя а от имени пользователя jenkins. Что клацать в такой ситуации?


(svim) #9

Самая банальная проверка. Напишите простой тест, типа “Hello Google”, и попробуйте запустить его. Если тест падает, ошибка в неправильных настройки Job’а. Затем просто по-гуглите на корректные настройких джобов, обратите внимание, что в зависимости от репозитория, будь-то svn, git, или локальная машина - есть свои нюансы настройки Job’ов. Раз создалась, учётка - jenkins, вы видимо устанавливали .dmg файл или из портов, верно? Я обходился обычным .war файлом и ручным запуска сервера.


(heartwilltell) #10

Да, устанавливал из .pkg файла. Ситуация такая - есть тесты которые заходят на определенные страницы и делают скриншоты, и мониторят наличие JS ошибок, они проходят норм, а фейлятся те, которые используют какие либо локаторы, при этом смотрел скриншот страницы прежде чем обратится к какому либо элементу - все отображается правильно.
Запускал тесты в TeamCity - но там они запускаются по обычному - открывая браузеры, которые я вижу, и все ок


(svim) #11

Так тесты и нужно запускать : -) Если напрягает, открытие браузера и выполнение сценария “перед носом” - установите виртуальную машину и прогоняйте их там.

Повторюсь, но “Тесты нужно запускать в открытом браузере, а не на фоне”. Так ваши приложения, будут полноценно отрисовываться, а селениум будет видеть всю необходимую DOM-структуру.

Что касательно вашего поведения в Jenkins. Скорее всего, последние билды Jenkins, по умолчанию уже содержат демона, который запускает тесты на фоне, что-то не отрисовывает на фоне и валится, - это нормально )


(heartwilltell) #12

Спасибо. Наверное пришло время перебираться на нормальные сервера.