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

Аудит и оптимизация QA-процессов
онлайн, начало 29 января
Тестирование безопасности
онлайн, начало 27 января
Школа Тест-Аналитика
онлайн, начало 27 января
Тестирование мобильных приложений
онлайн, начало 27 января
Фотография

Как прописать в локатор путь к элементу с переменным id ?


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

#1 mosketrem

mosketrem

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Дмитрий


Отправлено 03 ноября 2010 - 16:20

Тестирую сайт в Selenium IDE. Есть необходимость кликать по элементам списка, в котором многие тэги имеют много классов, но все одинаковые для каждого элемента списка. Отличие только в id, который берется с id отображаемой записи в базе. Т.е. при создании новой записи при каждом запуске теста этот самый id будет другим.
Вот пример такой строчки из списка:
<tr class="row g_g_later sel" id="row_t_4cd187e55105bb0417000039">
	
	<td class="r3">
		<div>
			<div class="emptyStar">
				<a class="star" hidefocus="true" style="outline: medium none;"></a>
			</div>
			<div class="gwt-HTML">
				Wed Nov 03 2010 18:03:46 GMT+0200 (MSK) LATER TASK&nbsp;&nbsp;<span style="display: none;" class="comment_count comments_t_4cd187e55105bb0417000039">0</span>
			</div>
		</div>
	</td>
	
</tr>
Нужно клоцнуть по элементу с текстом "Wed Nov 03 2010 18:03:46 GMT+0200 (MSK) LATER TASK"
Как с помощью xpath, или css, или еще как-то задать путь к такому элементу ?

P.S.
Задать определение по содержащемуся тексту у меня не получается, потому что тест тоже при каждом запуске теста тоже меняется. Я могу сохранить этот текст в JS переменную, но использовать эту переменную в функции contains() не получается. Видимо туда нельзя писать JS код.
  • 0

#2 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 03 ноября 2010 - 17:09

так получится?

xpath=(//tr[@class='row g_g_later sel' and @id]/td[@class='r3']/div[count(div)=2]/div[@class='gwt-HTML'])[1]

  • 0

#3 mosketrem

mosketrem

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Дмитрий


Отправлено 03 ноября 2010 - 19:15

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

Извините, что такой непонятный пример кода дал. Просто полный код всего списка занял бы несколько страниц. В нём очень много скрытого напихано, трудно разобраться.

Нельзя ли как-то при создании записи отлавливать id созданной в записи, который передается с помощью AJAX ? Или текст, содержащийся в нужном тэге, использовать в xpath ? Текст у меня в тесте хранится в JS переменной, но я не могу без получения ошибки вставить его в xpath
  • 0

#4 VovanUA

VovanUA

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

  • Members
  • Pip
  • 9 сообщений
  • ФИО:Водницький Володимир Петрович

Отправлено 03 ноября 2010 - 20:14

Если текст не меняетса, то можна так
//div[contains(text(), 'Wed Nov 03 2010 18:03:46 GMT+0200 (MSK) LATER TASK')]

Можно ещо клас для верности добавить:
//div[@class='gwt-HTML' and contains(text(), 'Wed Nov 03 2010 18:03:46 GMT+0200 (MSK) LATER TASK')]

Ну иле так:
//div[contains(@class, 'gwt') and contains(text(), 'Wed Nov 03 2010 18:03:46 GMT+0200 (MSK) LATER TASK')]

  • 0

#5 mosketrem

mosketrem

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Дмитрий


Отправлено 04 ноября 2010 - 07:55

Интерессное дельце.... Если написать click | //div[contains(text(), '${ttttttt}')] , где ttttttt - имя переменной, содержащей текст, то комманда срабатывает нормально. А я думал, что она не работает. Я просто после написания этой комманды кликал кнопку Find в IDE. По идее она должна была подсветить элемент, который записан в локаторе, если локатор задан правильно. А вместо этого выскакивала страшная крассная ошибка. Но если нажать "X", то комманда отрабатывается... Чудеса... или чепуха...
  • 0

#6 mosketrem

mosketrem

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Дмитрий


Отправлено 04 ноября 2010 - 07:57

VovanUA, я не могу написать напрямую текст в тэге, так как он всегда разный. Остановился на варианте click | //div[contains(@class, 'gwt') and contains(text(), '${ttttttt}')]
  • 0

#7 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 04 ноября 2010 - 17:06

Отличие только в id в верхней строчке и в тексте во втором вложенном div?

Сообщение отредактировал ekulgavaya: 04 ноября 2010 - 17:07

  • 0
In God we trust, the rest we test.

#8 mosketrem

mosketrem

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

  • Members
  • Pip
  • 68 сообщений
  • ФИО:Дмитрий


Отправлено 05 ноября 2010 - 08:59

да, уникальный id и текст. Как я уже написал. Решил это с помощью комманды click | //div[contains(@class, 'gwt') and contains(text(), '${ttttttt}')]
  • 0

#9 eRil

eRil

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

  • Members
  • Pip
  • 11 сообщений

Отправлено 19 января 2011 - 15:08

Помогите плиз разобраться с похожей проблемой!
Нужно кликнуть на чекбокс, у которого айди нету, а value будет всегда разным!
Единственное, что будет всегда одинаковым, это id001, в последнем теге. То есть надо как то через последний тег клацнуть на первый, который является чекбоксом.
Xpath только начал учить, поэтому не совсем понимаю как это можно сделать
<tr class="coctactSearchResultsRow_alternate">
	<td>
		<input class="chkContactSearchResult_Recipient" type="checkbox" value="23423434">
	</td>
	<td>
		<span class="spanDisplayContactResultDetails">Gr1</span>
	</td>
	<td>	
		<span class="spanDisplayContactResultDetails">Myk</span>
	</td>
	<td>id001</td>
</tr>

  • 0

#10 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 19 января 2011 - 16:31

Помогите плиз разобраться с похожей проблемой!
Нужно кликнуть на чекбокс, у которого айди нету, а value будет всегда разным!
Единственное, что будет всегда одинаковым, это id001, в последнем теге. То есть надо как то через последний тег клацнуть на первый, который является чекбоксом.
Xpath только начал учить, поэтому не совсем понимаю как это можно сделать

<tr class="coctactSearchResultsRow_alternate">
	<td>
		<input class="chkContactSearchResult_Recipient" type="checkbox" value="23423434">
	</td>
	<td>
		<span class="spanDisplayContactResultDetails">Gr1</span>
	</td>
	<td>	
		<span class="spanDisplayContactResultDetails">Myk</span>
	</td>
	<td>id001</td>
</tr>


xpath=//td[@id='id001']/../td[1]/input[@type='checkbox']
  • 0

#11 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 851 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 19 января 2011 - 16:39

xpath=//td[@id='id001']/../td[1]/input[@type='checkbox']

Вероятно, имелось в виду не [@id='id001'] , а [text()='id001']
  • 0

Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


#12 eRil

eRil

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

  • Members
  • Pip
  • 11 сообщений

Отправлено 19 января 2011 - 16:53

Большое спасибо! сработало с text()
  • 0

#13 Nafig

Nafig

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

  • Members
  • Pip
  • 31 сообщений
  • Город:Киев

Отправлено 31 января 2011 - 13:19

Товарищи, помогите разобраться в таком вопросе, необходимо проверить Selenium RC наполение таблички с динамическим id (id=j_id123:someTable), где j_id123 динамический префикс, соответственно xpath имеет аналогичный префикс. Как обратиться к такой таблице?
  • 0

#14 popo_kid

popo_kid

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

  • Members
  • PipPip
  • 79 сообщений

Отправлено 31 января 2011 - 14:01

css=table[id~="someTable"]
курите css attribute selectors,

хотя не, тут надо так xpath=//table[contains(@id, 'someTable')]
xpath function-contains
  • 0

#15 Nafig

Nafig

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

  • Members
  • Pip
  • 31 сообщений
  • Город:Киев

Отправлено 02 февраля 2011 - 09:05

css=table[id~="someTable"]
курите css attribute selectors,

хотя не, тут надо так xpath=//table[contains(@id, 'someTable')]
xpath function-contains


Примного благодарен, работает :)
  • 0

#16 Roman83

Roman83

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

  • Members
  • Pip
  • 1 сообщений

Отправлено 04 мая 2011 - 13:26

Помогите пожалуйста подобрать локатор для динамического объекта. Нужно нажать на текст "Products" в таблице.

<td rich:selectedclass="rich-tree-node-selected" rich:highlightedclass="rich-tree-node-highlighted" id="specTreeForm:spectree:575731507::j_id6815561401040027:text" class="rich-tree-node-text ">Products</td>

Я пробовал: selenium.click("//td[text()='Products']"); Но новая страница не открывается.

Selenium IDE выдает следующий код:

selenium.click("specTreeForm:spectree");
selenium.click("specTreeForm:spectree:575731507::j_id6815561401040027:text");
  • 0

#17 DrBlast

DrBlast

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

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 05 мая 2011 - 11:43

Помогите пожалуйста подобрать локатор для динамического объекта. Нужно нажать на текст "Products" в таблице.

<td rich:selectedclass="rich-tree-node-selected" rich:highlightedclass="rich-tree-node-highlighted" id="specTreeForm:spectree:575731507::j_id6815561401040027:text" class="rich-tree-node-text ">Products</td>

Я пробовал: selenium.click("//td[text()='Products']"); Но новая страница не открывается.

Selenium IDE выдает следующий код:

selenium.click("specTreeForm:spectree");
selenium.click("specTreeForm:spectree:575731507::j_id6815561401040027:text");


Страница может не открываться потому что нужно нажимать на "a" а не на td. Также есть вероятность, что на странице существует еще несколько td с текстом Products. Поставьте себе xpath валидатор, чтобы проверить сколько таких элементов на странице.

Попробуйте нажимать на элемент по началу и окончанию id + можно привязаться к тексту Products
1. selenium.click(jq("td[id^='specTreeForm:spectree'][id$='text']"));
или
2. selenium.click(jq("td:contains('Products')[id^='specTreeForm:spectree'][id$='text']"));
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#18 Romanson

Romanson

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 18 декабря 2016 - 14:11

Здравствуйте!

Подскажите пожалуйста, как задать значение в Selenium IDE для анимации на сайте. По клику на анимационную цифру должен осуществляться переход на страницу! Селениум записывает такое значение css=a > span , но при проверке выдает ошибку что не удалось пройти этот шаг. Спасибо за ответы.


  • 0

#19 Snap

Snap

    Специалист

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


Отправлено 19 декабря 2016 - 13:40

1. С помощью чего сделана анимация?

2. Нужно видеть исходный код данного элемента.


  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#20 Romanson

Romanson

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 19 декабря 2016 - 15:33

Данный блок анимированный http://prntscr.com/dlcazq

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


  • 0


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



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

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

Яндекс.Метрика
Реклама на портале