t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как искать динамические селекторы checkbox

selenium
Теги: #<Tag:0x00007fb2f8727948>

(temar) #1

Подскажите пожалуйста как задать xpath динамически меняющемуся селектору checkbox -a
По id не находит и пишет ошибку.

‘//*[@id=“7893318_152941”]’

PS: я новичок


(Viktor) #2

сделайте метод которая будет принимать динамический параметр и возвращать нужный вам xpath
например
private string GetLocator(string name) => $"//*[@name=’{name}’]";

Также можете найти все чекбоксы в этом блоке
//*[@data-autotest-id=‘7893318’]//input (по идее, судя из названия, этот локатор не должен быть динамическим)
А потом из массива найденных элементов найти нужный вам чекбокс с помощью метода GetAttribute(“name”) или по тексту
Судя по тому как расположен автотестовый локатор, тестировщики сайта так и делают
Но этот способ по производительности ниже чем первый, особенно на большом количестве элементов, но если элементов мало, особой разницы не почувствуете


(temar) #3

Добрый день! К сожалению данный xpath не верный не находит…
И я не могу выбрать все элементы и сунут их в массив данных.
//*[@data-autotest-id=‘7893318’]

Что можно еще в моем случае сделать?


(temar) #4

Разобрался, самый верный метод поместить такие элементы в контейнс:

‘//*[contains(@data-autotest-id,‘7893318’)]//input’


(Viktor) #5

‘//*[contains(@data-autotest-id,‘7893318’)]//input’
Так не будет работать если на странице будет 2 айдишника, например
78933181
7893318
То что вы пишете это тоже самое, только поиск по частичному содержанию текста. У меня неправильные ковычки вставились и у вас тоже сейчас, если вы скопируете у самого себя то тоже работать не будет
Попробуйте так

//*[@data-autotest-id='7893318']//input

(temar) #6

Вы правы, тогда для выбора только чек боксов нужно будет:

/*[@data-autotest-id=‘7893318’]//div//div


(Valentin G ) #7

Я бы не искал по айди в данном случае, использовал бы метод, куда подавал название бренда, который вставлялся бы в такой селектор:

input[name*='<brandName>']

(temar) #8

а как быть если нужно сделать проверку выбора всех селекторов разом?


(Valentin G ) #9

В смысле выбирать один за другим все галочки? Тогда нужно другой селектор, лучше List<WebElement> использовать, например тот, который вы написали, как верный. И через цикл кликать. Если я правильно понял ваш вопрос.