Можно ли с помощью Selenium выбрать произвольный локатор из нескольких одинаковых?


(Vitekes) #1

Тестирую веб-приложение. имеется порядка 50 таблиц с разным количеством строк, названием и id. общий элемент только один - это элемент создающий сортировку (по убыванию и по возрастанию). Необходимо создать тест проверяющий корректность сортировки. При выборе сортировки в другом столбце значение кнопки сбрасывается на значение по умолчанию (по умолчанию - нет никакой сортировки)
Вопрос заключается в следующем:

На странице от 3 до 15 столбцов для сортировки, у каждой кнопки одинаковая статическая часть (динамическая часть имени меняется каждый раз при заходе в систему). По умолчанию Selenium при нахождении на странице нескольких элементов с одинаковым локатором выполняет действия над первым из них, хотелось бы узнать существует ли возможность выбрать не первый элемент по порядку, а скажем третий или пятый.

Я использую RobotFramwork + Selenium Library.

 


(Pnevmoslon) #2

Используя findElements можно получить список элементов, а дальше уже выбирать в нём любой из элементов:

List<WebElement> elements= driver.findElements(By.className("locator"));

elements.get(3).click()


(Vitekes) #3

Эх, конечно это хорошое решение, но к сожалению немного не то. В данном проекте я не использую язык ява. Необходимо обойтись средствами robotframework и selenium.

 


(kpx) #4

если локатор xpath, то можно так: //button[3] or (//button)[3]


(Vitekes) #5

да у меня xpath выглядит так: //*[contains(@src,'DataTableIconSort')].  самое интересное что используя firebug я нахожу (//*[contains(@src,'DataTableIconSort')])[7] седьмой элемент,  но при  запуске теста selenium не находит этот элемент.


(Mykhailo Poliarush) #6

так как у вас все таки написал xpath?

ну и конечно, было бы неплохо увидеть не только xpath, но и код, которые использует этот xpath

также хотелось бы уточнить, что Вы используете и как программируете тесты?

1) вы используете selenium2libraty

2) или вы пишите свой код на python, а потом составляете тесты в RF

 

в общем, если Вы используете selenium2library Вы можете использовать уже выполненые функции получения значений из таблицы

http://rtomac.github.com/robotframework-selenium2library/doc/Selenium2Library.html

 


(Mykhailo Poliarush) #7

а вам на каком языке программирования надо?


(ivanidzzza) #8

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

 и Xpath и Сss selecters  поодерживают выбор из списка элементов с одинаковими локаторами

еще вы можете попроботать собрать список всех элементов и работать уже по номеру в списке  через FindElements

 


(Taras) #9

Вам наверное нужно ранжомно еще и индекс генерировать и записивать его в переменную какую то.


(Alexander Petrovich) #10

Python

import random

elements = driver.find_elements_by_xpath("//*[contains(@src,'DataTableIconSort')]")

random_element = random.choice(elements)