![Фотография](https://secure.gravatar.com/avatar/3943e289d93cd331d772d683fe2973dc?s=100&d=https%3A%2F%2Fsoftware-testing.ru%2Fforum%2Fpublic%2Fstyle_images%2Fmaster%2Fprofile%2Fdefault_large.png)
AddLocationStrategy for JSF ID's
#1
Отправлено 31 марта 2011 - 09:33
я новичок в тестировании и в селениуме.
Тесты на seleniumRC+JUnit. Тестирую веб приложение, которое написано на основе JSF. Проблема в том, что часть ID генерируется автоматически, а часть остается статической. эту статическую часть ID я бы хотела использовать как локатор для элемента. Например, ID = "jsfwmp9169:defaultForm:import:defaultForm:vorname0", vorname0 - статичен и по нему можно было бы найти элемент.
Может кто-нибудь знает, как можно это реализовать, например с помощью AddLocationStrategy.
Или, возможно, вы уже сталкивались с проблемой и решили ее более оптимальным способом.
P.S. XPath не хотелось бы использовать, т.к. приложение еще в стадии разработки. Разработчики пообещали, что часть id будет оставаться постоянной.
Очень надеюсь на помощь!
Заранее спасибо. Елена
#2
Отправлено 31 марта 2011 - 09:48
#3
Отправлено 31 марта 2011 - 09:55
css=button[id$='vorname0']
#4
Отправлено 31 марта 2011 - 11:23
По поводу CSS и XPath: необходимо ведь указывать ID полностью, чтобы референцировать элемент. Или я ошибаюсь? Полностью использовать ID невозможно, т.к. определенная их часть постоянно меняется.
#5
Отправлено 31 марта 2011 - 11:45
PS: "референцировать" - еле произнёс
![:biggrin:](http://software-testing.ru/forum/public/style_emoticons/default/biggrin.gif)
#6
Отправлено 04 апреля 2011 - 06:53
у меня возникла еще одна проблемка с ID, может у кого-нибудь есть идея. Строки в таблице генерируются автоматически и только имя таблицы остается постоянным (asyncTable1).
(jsfwmp7795:defaultForm:import:defaultForm:asyncTable1:__rowAlexandridisBenWedu_0020_Sepu_0020_19u_0020_00u_003a_00u_003a_00u_0020_CESTu_0020_2007:selectRowOnClick) - это ID radiobutton.
Пока даже понятия не имeю, как мне работать с этими таблицами и как однозначно выбирать ее элементы.
Если была у вас такая же проблема и вы ее решили, подскажите, пожалуйста.
P.S. слово "референцировать" буду в будущем избегать)))
#7
Отправлено 04 апреля 2011 - 07:40
2. Поискать другие способы локейтить. Их много, потому без кода странички оно как-то не очень понятно какой лучше/удобнее. Да и без постановки задачи тоже.
#8
Отправлено 04 апреля 2011 - 08:36
2. Постановка задачи:
Надо в таблице найти по имени (например как в скриншоте "Alexandridis, Ben") соответствующую строку и radiobutton и активировать его.
Для нахожденя radiobutton можно использовать записанное ID (точнее те его части, которые остаются постоянными) и имя (н-р "Alexandridis, Ben").
#9
Отправлено 04 апреля 2011 - 12:26
А вообще по-моему стоит придерживаться стратегии: автотесты не должны влиять на тестируемый код. Т.е. просить разработчиков писать код иначе, ссылаясь на ограничения своего инструмента - это плохо, тем более, что у Selenium в этом смысле практически нет ограничений.
#10
Отправлено 05 апреля 2011 - 03:41
#11
Отправлено 05 апреля 2011 - 07:03
И хотелось бы еще узнать ваше мнение по этому поводу: мои тесты извлечены из программы и хранятся в виде XML-файлов, программа грузит эти тесты, parser считывает и выполняет соответствующие команды. Сделано это - чтобы облегчить поддержку тестов - через редактирование XML, а не кода программы. Записал тест на IDE, трансформировал его в XML, добавил псевокод. Так как тестируемое приложение в будущем будет еще дорабатываться и переделываться, необходимы тесты, которые бы легко поддерживались. Дополнительные операции, которых нет в selenium, добавляются к xml вручную как псевдокод (например создание определенного состояние базы данных (fixture)). Тестовые данные хранятся тоже в отдельных xml-файлах.
Кусочек тестового файла:
<selenese>
<command>type</command>
<target><![CDATA[jsf111:defaultForm:import:defaultForm:vorname0]]></target>
<value><![CDATA[$kind/vorname]]></value>
</selenese>
Недеюсь у меня получилось донести идею.
#12
Отправлено 05 апреля 2011 - 07:17
Собственно примеры:
1. Локализация (очень не круто когда вы не можете легко взять и прогнать те же тесты под другой локалью).
2. Минорные изменения в приложении (кнопку переименовали с OK на Confirm - ловите false positive). В вашем случае поменяете формат вывода имени/фамилии и уже оп-па. А если она еще и настраиваемой станет, то количество го... не очень хорошего кода вырастет в разы.
3. Кроссбраузерность
Это все лечится. Риски минимизируются. Но все равно это костыли которых можно избежать обеспечив Testability продукта.
Вот еще можно почитать для общего развития почему лучше все же человеческие id получать/делать: http://blogs.atlassi...n_worth_it.html
Про поддержку и прочее - не нужно городить огород с псевдокодом и xml. Лучше сразу переходите на Selenium RC и там делайте человеческий код тестов с человеческой же структурой.
#13
Отправлено 05 апреля 2011 - 07:30
#14
Отправлено 05 апреля 2011 - 07:44
#15
Отправлено 05 апреля 2011 - 08:01
#16
Отправлено 05 апреля 2011 - 08:04
#17
Отправлено 05 апреля 2011 - 08:14
#18
Отправлено 05 апреля 2011 - 08:33
И да, тестовое приложение это Sistem Under Test или что?
#19
Отправлено 05 апреля 2011 - 09:03
#20
Отправлено 08 апреля 2011 - 05:15
![:focus:](http://software-testing.ru/forum/public/style_emoticons/default/focus.gif)
зачем заново придумывать dependуncy injection ?
Куча хороших фреймворков, которые уже написаны, опробованы и хороши настолько, что ими пользуются. Возьмите хотя бы тот же TestNG для java. Парсер - это лишняя нагрузка и замедление работы тестов.
Зачем?
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных