Archive

Archive for the ‘XPath’ Category

Клик по не самому последнему элементу (оси в xpath)

17 March 2011 17 comments

На странице таблица с несколькими колонками. В таблице представлен список категорий сайта.

Первая колонка – чекбоксы.

Вторая – линки на страницы настроек каждой категории.

Другие колонки – сейчас не важны.

Внизу есть кнопка действия над выбранными категориями.

Что-то вроде этого:

Задача: средствами Selenium выбрать чекбокс напротив категории, которую нужно обработать. И нажать на кнопку, что уже мелочь. Read more…

XPath – cоединить два невложенных элемента

14 January 2011 3 comments

Есть код:

<div>
<label>Message:</label>
<span><textarea name="ContactUsForm_Comment"></textarea></span>
</div>

Я хочу записать assertElementPresent содержимого всего div одним движением.

Если проверяю только //label[contains(text(),’Message:’)] – то все ок.

Если проверяю только //textarea[@name=’ContactUsForm_Comment’] – тоже все ок.

Вопрос: как соединить проверку этих элементов в одно?

Проблема в том, что элементы label и textarea не вложены, а  находятся на одном уровне.

Решение: после первого элемента указываем “поднимись на один уровень и обратись ко второму элементу по порядку расположения“:

//div/label[contains(text(),’Message:’)]/../span/textarea[@name=’ContactUsForm_Comment’]

А вот else if, тогда я бы…

28 August 2010 88 comments

Поступил вопрос: “Можно ли в Selenium IDE реализовать цикл if? Например, если есть кнопка “Войти”, тогда нажимаем ее, иначе нажимаем на “Регистрация”?

Можно.

Но только в рамках одного файла из тест-сьюта. Возможность произвольного перехода между файлами в контексте тест-сьюта в Selenium IDE я не нашел.

Подобные переходы делаются с помощью ярлыков (labels), и команды gotoIf, а эти штучки появляются только после подключения внешнего js-файла.

Ярлык (label) сам по себе ничего не делает – это просто особым образом именованная строчка, к которой Selenium IDE насильно переходит, после чего начинает выполнять команды, которые следуют далее по коду

.

Адекватное решение

.

Во-первых, слегка изменю условия примера из заданного вопроса:

  1. “Если залогинен:
    • перейти на страницу ‘My Dashboard’.
  2. Если не залогинен:
    • перейти на страницу Login,
    • залогиниться,
    • перейти на страницу ‘My Dashboard'”

Такой алгоритм я использую непосредственно в работе, и мне он кажется более используябельным, нежели “если нет кнопки “Логин”, тогда выбрать кнопку “Регистрация”.

Изменение не существенное, поэтому поехали дальше.

Read more…

Легкий прицел по целям

Бывает такая проблема:

на странице несколько одинаково идентифицируемых элементов, а надо прицелиться во второй (или пятый).

Например, на странице каталога все превью продуктов снабжены кнопками “Купить”, и определяются все эти кнопки одним классом и обрабатываются все одним скриптом.

Уточню ситуацию в моем приложении: кнопка “Купить” оформлена в виде обычного линка. Но по-умолчанию на каждой продуктовой странице есть блок с “похожими товарами”, которые тоже снабжены точно такими же линками “Купить”…

Read more…

Сокращение XPath – клик по тексту

Бывает так, что некоторые линки на странице настолько закрыты жаваскриптами, что Selenium IDE или записывает клики по ним в виде //html[@id=’js’]/body/table[2]/tbody/tr/td[2]/div[4]/div[1]/div/table[1]/tbody/tr/td/a/i, или вообще не может записать клик.

Ситуация:

1) на странице есть линк “details”, который открывает страницу или слой на странице с дополнительными данными, которые по-AJAX подсасываются с сервера, не открывая для этого отдельное окно браузера.

2) этот линк на странице уникален.

3) но конструкция у этого линка хитрая. Класс у него указан такой: class=”carticon item_addtocart”, и меняется в зависимости от некоторых условий (с какой страницы пришел, например). То есть, в эту минуту класс именно такой, какой был указан, а через некоторое время он же будет выглядеть как class=”carticon item_addtocart search_engine_guest”, или как-то еще. Записывать все эти состояния нет нужды, цель в том, чтобы клик по линку срабатывал правильно.

4) конструкция | click | link=details | в силу некоторых технологических причин (гребанный AJAX) невозможна.

Шо делать?

Read more…

Categories: XPath