А давайте распишем возможность выбора какого-то значения из таблицы, в которой находится несколько страниц, и нужно пролистать страницы в поисках нужного слова (или элемента).
Предположим, что у нас таблица с логинами, и поиск нужного userName доступен только посредством пролистывания страниц таблицы.
Запускаем в Selenium IDE labels (подключаем внешний js-файл).
Логика теста:
- кладем искомый userName в переменную.
- открываем первую страницу таблицы.
- ищем на этой странице нужное слово (конечно, предполагаем, что имя юзера непременно будет найдено)
- если нашли – кликаем по нему.
- если не нашли – кликаем по линку Next для перехода на следующую страницу таблицы
- снова ищем на этой странице нужное слово.
- если нашли – кликаем по нему.
- если не нашли – кликаем по линку Next для перехода на следующую страницу таблицы
- …
- продолжаем до окончания страниц, которые можно пролистывать.
listPagesInTableForSearchExpectedWord | ||
storeExpression | Иван Столяров | userName |
label | checkUserName | |
storeEval | if (selenium.isTextPresent(storedVars[‘userName’]) == false) {nextMove = ‘listToNextPage‘} else if (selenium.isTextPresent(storedVars[‘userName’]) == true) {nextMove = ‘openUserPage‘} | nextMove |
gotolabel | ${nextMove} | |
label | listToNextPage | |
click | link=Next | |
waitForPageToLoad | 90000 | |
gotolabel | checkUserName | |
label | openUserPage | |
clickAndWait | //*[contains(text(), ‘${userName}’)] |
Готово.
На всякий случай: есть большая разница между //*[contains(text(), ‘${userName}’)] и //*[text()=’${userName}’]. Второе условие жесткое и однозначное.
Скажи те пожалуйста
чем gotolabel ${nextmove} отличается от echo ${nextmove}
echo – вывод содержимого переменной “nextmove” в логе Selenium IDE.
gotolabel – перейди к ярлыку, который называется тем словом, которое находится в переменной “nextmove”.
Как узнать количество повторений слова на странице?
То есть, если бы “Иван Столяров” было бы на странице несколько раз и нам надо было бы найти количество повторений, то как это можно сделать?
Два шага:
storeXpathCount | //*[contains(text(), ‘Иван Столяров’)] | variablea
echo | ${variablea}
отличный блог, много полезной информации. я только начинаю изучать IDE и столкнулась с проблемой, которую второй день не в состоянии решить.
никак не могу получить листания, сразу идет переход на последнюю метку label: verifyIt. посмотрите скриншот тест-кейса, пожалуйста, http://screencast.com/t/OzRuNb3oeiL
Без изучения кода страницы ничего не могу сказать.
И комментарии пишите к строкам.
Алексей, спасибо за ответ. Думала и додумалась, что скрипт определяет совпадение текста в хлебных крошках, поэтому до перелистывания дело не доходит.
как в вашем выражении if (selenium.isTextPresent(storedVars[‘eduName’]) == false) {nextMove = ‘listToNextPage’} else if (selenium.isTextPresent(storedVars[‘eduName’]) == true) {nextMove = ‘clickOnIt’} уточнить, что надо искать именно в //td[2], а не на всей странице?
“isTextPresent” (оно же assertTextPresent) в принципе ищет по содержимому всей страницы, а не только в определенном элементе.
Можно использовать assertText(locator, pattern)
Например, в локаторе //td[2] есть текст “альфа”.
Тогда в обычных условиях команду для Selenium IDE надо написать так:
assertText
//td[2]
альфа
Переведем на язык JS:
(selenium.isElementPresent(“//td[2][contains(text(), ‘альфа’)]))
Проверьте, если сработает, бо я не проверял, просто рассуждаю.