2012-02-28 4 views
0

Мне просто пришлось немного поиграть в тестировании моего приложения и случайно наткнулся на проблему.Selenium не включает кнопку

На экране входа в систему есть поля идентификатора пользователя и пароля и логин, но активируется через javascript if и onlf, если в обоих полях есть какой-то контент.

Когда я записываю пакет, кнопка включается и селен записывает действия.

Но когда запущен полный пакет, кнопка входа в систему никогда не включается и тест не проходит после ожидания 30000 мс.

Должен ли я включить эту кнопку вручную или написать тестовый пример? Каково идеальное решение для этого сценария.

С уважением,

Сатья

ответ

0

Много месяцев назад я столкнулся с подобным поведением в WatiN, где все события Javascript не обязательно вызываются с помощью методов испытаний. Было два пути, которые я решил обойти. Один из них заключался в явном вызове события Javascript, что-то вроде MyTextField.FireEvent («onchange»). Другой способ состоял в том, чтобы просто вызвать метод «enable» javascript непосредственно, что-то вроде MyPage.Eval («myjavascriptEnableFunction»).

Ни одно из решений не идеально, поскольку оно не имитирует поведение пользователя, но это было лучшее, что я мог найти.

0

Без дополнительной информации, то трудно определить точное решение вашей проблемы. Тем не менее, я думаю, Селен не поддерживает то, что вам требуется. Я испытал это точно проблема в прошлом.

во-первых, когда текст вводится в текстовое поле, запускается довольно много событий. Focus, Change, KeyDown, KeyPress, KeyUp. Команда Selenium 'Type' не запускает эти события, она просто помещает текст в поле.

Чтобы правильно имитировать действие пользователя, вам нужно выяснить, какие события важны для рассматриваемого текстового поля и добавить хотя бы одну строку, чтобы запустить это событие. Если вы используете Selenium IDE, может быть достаточно просто запустить событие KeyPress после шага типа (FireEvent «keyPress» или KeyPress). Я использую RC для своих тестов, поэтому я написал метод имитации нажатий клавиш для каждого введенного символа. Вы можете сделать то же самое, написав настраиваемую команду типа, которая запускает события.

пример:

<table> 
<tr> 
<td>Type</td><td>boxLocator</td><td>Text Input</td></tr> 
<tr> 
<td>KeyPress</td><td>boxLocator</td><td>t</td></tr></table> 

Я думаю, что должен делать то, что вы хотите, и активировать кнопку.

Наконец, комментарий о необходимости делать что-то вне действий пользователя не совсем прав. Когда пользователь действует, браузер выполняет много разных действий. Во всяком случае, Selenium выбирает не делать все эти действия, поэтому мы остаемся набираем слабину.