Перейти к содержимому

Фотография

Изменение текста на странице

selenium ide

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 27 ноября 2015 - 09:15

Осваиваю Selenium IDE, так что вопрос может быть очень простым и наивным.

Произвожу действие на странице, конкретно это применение фильтра.

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


  • 0

#2 tshuvaev

tshuvaev

    Новый участник

  • Members
  • Pip
  • 53 сообщений
  • ФИО:Timur
  • Город:Москва

Отправлено 27 ноября 2015 - 09:34

Нужна проверка  - “verifyTextPresent”


  • 0

#3 seven_sunsets

seven_sunsets

    Новый участник

  • Members
  • Pip
  • 18 сообщений
  • ФИО:Гришаев Станислав

Отправлено 27 ноября 2015 - 10:22

Нужна проверка  - “verifyTextPresent”

 

или можно использовать assertTextPresent - первый вариант - нестрогая проверка ( если текст не будет соответствовать ожидаемому тест не завалится и пойдёт дальше ), второй вариант - строгий. 


  • 0

#4 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 27 ноября 2015 - 11:41

Проще:

waitForText

Или посложнее сохранить первоначальный текст, подождать изменения элемента и сравнить изменился ли текст.

 

Кстати команда verifyTextPresent и assertTextPresent считаются устаревшими (deprecated), вместо них лучше использовать verifyText / assertText


  • 0

#5 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 27 ноября 2015 - 12:35

Спасибо за ответы.

Дело в том, что на странице в этом месте текст вида: "Найдено XXXXX шт.", а будет "Найдено YYYYY шт."

X и Y могут быть разные в разные моменты времени, в зависимости от записей в БД.

А verifyText / assertText, как я понял проверяют в строгом соответствии. А мне надо понять, что XXXXX изменилось на YYYYY без проверки на соответствия конкретным значениям. А если изменения не будет, значит фильтр не отработал.


  • 0

#6 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 27 ноября 2015 - 13:07

не знаю, можно в IDE сделать так?
получаете первое значение (запомнится "Найдено XXXXX шт.")
фильтруете
ищете первое значение

нашлось - фильтр не отработал, не нашлось - всё хорошо

Ну или получить первое, отфильтровать, получить второе, сравнить
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#7 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 27 ноября 2015 - 13:12

Получается надо конструкция if/then/else прикрутить в тест.

Насколько я знаю, возможности Selenium IDE можно расширять при помощи JavaScript тогда это можно реализовать.

А вот как?


  • 0

#8 seven_sunsets

seven_sunsets

    Новый участник

  • Members
  • Pip
  • 18 сообщений
  • ФИО:Гришаев Станислав

Отправлено 27 ноября 2015 - 13:14

Получается надо конструкция if/then/else прикрутить в тест.

Насколько я знаю, возможности Selenium IDE можно расширять при помощи JavaScript тогда это можно реализовать.

А вот как?

 

касательно условий в тестах IDE - https://siderulezzz....m/2010/08/28/7/


  • 0

#9 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 30 ноября 2015 - 06:42

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

Тест падает с таким сообщением: "[error] locator not found: ${nextMove}".

Что может быть не так? Я о js имею смутное представление.

Вот кусок теста:

<!--проверяем наличие поля логин и принимаем решение о следующем шаге-->
<tr>
	<td>storeEval</td>
	<td>if (selenium.isElementPresent('name=username') == true) {nextMove='login'} else if (selenium.isElementPresent('name=username') == false {nextMove='goToUnio'}</td>
	<td>nextMove</td>
</tr>

  • 0

#10 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 02 декабря 2015 - 12:57

Отвлекся от решения задачи на другие моменты.

Вопрос с ветвлением решил.

 

Возвращаюсь к основной задаче и совету vkazar.

Получился вот такой тест

<!--сохраняем в переменную содержимое элемента-->
<tr>
	<td>storeText</td>
	<td>css=div.object-list &gt; div.header-block &gt; span</td>
	<td>objectsCount</td>
</tr>
<!--тут работаем с фильтром-->
<!--всякая магия, которая упущена-->
<!--проверяем, что содержимое элемента не совпадает с сохраненной ранее переменной-->
<tr>
	<td>verifyNotText</td>
	<td>css=div.object-list &gt; div.header-block &gt; span</td>
	<td>${objectsCount}</td>
</tr>

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

Ставить тупо задержку, как-то неправильно. Нужно что-то типа waitForElementChanged, но такого не нашел.

Что подскажете?


  • 0

#11 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 02 декабря 2015 - 14:49

Ставить тупо задержку, как-то неправильно. Нужно что-то типа waitForElementChanged, но такого не нашел.

Ну, на время поиска решения можно и задержку поставить :)
Вот тут нашёл команду. Может подойдёт?
waitForElementNotPresent
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#12 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 02 декабря 2015 - 17:49

Вот тут нашёл команду. Может подойдёт?
waitForElementNotPresent

Нет, эта команда ждет, пока элемент не исчезнет. А у меня он просто изменяется.
  • 0

#13 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 03 декабря 2015 - 05:20

Нашел решение на свежую голову. :)

<tr>
	<td>waitForNotText</td>
	<td>css=div.object-list &gt; div.header-block &gt; span</td>
	<td>${objectsCount}</td>
</tr>

Вот такая функция ждет пока в элементе не изменится текст.


  • 0

#14 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 03 декабря 2015 - 06:58

Нашел решение на свежую голову. :)

Сапоги надо чистить с вечера, чтобы с утра надевать их на свежую голову (ц) любой прапорщик  :smile:
А по сути. Если искать элемент по тексту в нём, то как только текст изменится - то и элемент исчезнет ;) Но твоё решение лучше, согласен.
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#15 demshin

demshin

    Новый участник

  • Members
  • Pip
  • 33 сообщений
  • ФИО:Демшин Александр Васильевич
  • Город:Пермь

Отправлено 03 декабря 2015 - 08:04

Если искать элемент по тексту в нём, то как только текст изменится - то и элемент исчезнет ;) 

 

А с чего вдруг элемент исчезнет? Был div, его содержимое поменялось, а div ведь тем же самым останется, он не исчезнет.


  • 0

#16 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 03 декабря 2015 - 08:39

Я не знаю, как в IDE, работаю Selenium+WebDriver.
Это всё моя любовь к придумыванию велосипедов, так что можно не обращать внимание :smile:
 
1. Нашли элемент1 (xPath="//div[id='identifier']")
2. Получили текст элемента
3. Нашли элемент2 с привязкой к тексту (xPath="//div[id='identifier'][text()='Text']" (по сути, это тот же элемент, но с другим критерием поиска)
4. Ждём, пока элемент2 не исчезнет.
5. ???
6. PROFIT!
 
а вообще,  

твоё решение лучше, согласен.


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©




Темы с аналогичным тегами selenium ide

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных