Watir и Ajax запросы - PullRequest
       6

Watir и Ajax запросы

0 голосов
/ 11 октября 2011

В моем веб-приложении у меня есть простое текстовое поле. Для этого текстового поля у меня есть функция jQuery, которая всегда будет выполняться при каждом keyup . С помощью этой функции назначается Ajax-запрос, который загружает каждый раз результат SQL-запроса. Мой код эквивалентен коду Railscasts . Сейчас я тестирую свое веб-приложение с помощью Selenium. С этой строкой кода

browser.text_field(:id => 'textfield').set("Search text")

текст будет написан и содержание будет изменено. После этого следует нажать на ссылку, которая размещается на динамическом контенте с этим кодом

browser.a(:id => "link").click

Проблема в том, что событие click не будет выполнено. Кто-нибудь знает, в чем может быть проблема? Или, может быть, пример с Watir и Ajax?

Ответы [ 3 ]

0 голосов
/ 12 октября 2011

Без примера сайта для проверки трудно быть уверенным, но я выкину несколько потенциальных решений для вас

Если на стороне клиента javascript ищет события onkeyup, вам может понадобиться запустить одно послеустановка содержимого поля.Вы можете сделать это с помощью метода .fire_event

Вы могли бы просто посмотреть на проблему синхронизации.Если характер ссылки меняется в результате ввода, возможно, что Watir запускает два комментария в быстрой последовательности, и код на стороне клиента все еще находится в процессе выполнения своей задачи (особенно если есть назад и впередмежду кодом jquery и веб-сервером, что также приводит к задержкам в работе сети. Вам может потребоваться короткий перерыв между командами (перебор) или ожидание, пока конкретный элемент перейдет в ожидаемое состояние (немного больше работы, но и немногоболее устойчивым и не подверженным взлому - задержка превышает продолжительность вашего сна)

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

0 голосов
/ 13 октября 2011

Если это оригинальный Watir / Firewatir, я бы попытался заставить его навести курсор на ссылку, прежде чем он попытается щелкнуть по ней.

У меня ранее была эта проблема со ссылками, которые появляются после ввода в "autocomplete "(т.е. он пытается угадать текст, который вы хотите, отфильтровывая огромный список возможностей).

Попробуйте это:

browser.wait_until{browser.link(:id => "link").present?}
browser.link(:id => "link").fire_event("onmouseover")
browser.link(:id => "link").click

Если это работает, попробуйте без.fire_event("onmouseover"), потому что может случиться так, что он пытается щелкнуть ссылку, прежде чем она станет видимой, и не может это сделать.

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

0 голосов
/ 11 октября 2011

Вы можете использовать метод капибары.

click_link("link")

для набора ajax :js => true в вашем тестовом примере

http://opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/

...