2008/12/26

Как приручить AJAX в Selenium

Технология AJAX сейчас встраивается в большинство web-приложений и я столкнулась с проблемой как автоматизировать тест-кейсы, в которых используется AJAX.

AJAX подразумевает что страница перегружается не полностью, что значительно ускоряет работу с приложением.

При перезагрузке элементов Selenium их не видит, а ставить просто паузу - это некорректно.

Я использую такой прием:

boolean el = false; //логическая переменная
for (int second = 0; second < 1000; second++) {
try {
if (selenium.isElementPresent("name")) {
el = true; // если нужный элемент появился то логическая переменная получает значение true
break;

}
}
catch (Exception ignore) {
}
pause(1000);
}
assertTrue(el);

2 comments:

alecsel@yandex.ru said...

Думаю ваш код не совсем корректен.

1) Вы перехватываете любое исключение (в том числе не обрабатываемое) не проверяя его - что не рекомендуется делать.
2) Не факт что у вас возникло исключение связанное с задержкой срабатывания AJAX. В этом случае вам по любому нужно понять какое исключение вы словили.

Селениум предлагает простое решение. Метод waitForPageToLoad("30000") позволяет подождать 30000 mils во время перезагрузки. Только не стоит его втыкать где попало - чревато просто зависанием (отсутствием каких либо действий). Но для перезагрузки страницы самое то.

gort said...

Предложенный вариант и аналоги кажется единственным выходом.

А почему не работает WaitForTextPresent?