2014-10-29 3 views
-2

Я пишу несколько автоматических тестов в Selenium 2.0 с помощью драйвера Firefox. Сайт использует множество привязок, например, тег «input» с атрибутом «data-val-method-to-execute», который запускает функцию javascript.Selenium Webdriver нажимает элемент перед загрузкой Javascript

Примерно 10% моих тестов случайным образом выходят из строя, потому что драйвер щелкает элемент до того, как соответствующая функция javascript загрузится - так что ничего не произойдет.

Одним из решений может быть Thread.Sleep - проблемы: я должен был бы реализовать во всех своих тестах (довольно много). Они будут сильно замедлять мои тесты, и время - проблема. Простой выпадающий со спящим 1 секунда не всегда работает (так что мне нужно будет увеличить таймаут)

+0

Вы используете класс 'ExpectedConditions' вместе с классом WebdriverWait? –

+0

Я не использую ExpectedConditions, потому что драйвер успешно находит элементы. –

ответ

0

Вам нужно выяснить способ заставить Селен подождать, пока страница не будет готова. Для этого нет решения «один размер подходит всем». Это действительно зависит от того, что вы делаете.

Для некоторых сложных AJAX/JavaScript мне пришлось использовать phantomjs и добавить код, который подсчитывает количество открытых/активных сетевых подключений. Тест будет ждать, пока номер не изменится (поэтому я знаю, что запрос AJAX был отправлен), а затем до тех пор, пока количество активных соединений не вернется к 0 (поэтому я знаю, что AJAX завершен).

В качестве альтернативы, попробуйте добавить скрытый DIV на страницу, в которой говорится, что тест «все скрипты завершены». Подождите, пока появится DIV. Проблема заключается в том, чтобы убедиться, что ваши обработчики AJAX создают DIV.

Чтобы избежать загрязнения вашего кода, используйте пустую функцию, которая создает DIV и вставляет дополнительный элемент <script> в голову при запуске тестов, которые перезаписывают эту функцию.

+0

Спасибо за ваш ответ. Аарон, я воспользуюсь вашим скрытым решением DIV и сделаю некоторые тесты. Что касается запросов AJAX, они не представляют проблемы, потому что я могу ждать с помощью webdriver для определенных элементов после завершения запросов. Я уверен, что это пригодится в будущем. –

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