Как нажимать на элементы, которые сгенерировали идентификаторы, если я не знаю, какой идентификатор будет в Selenium - PullRequest
1 голос
/ 07 ноября 2019

Скажем, у меня есть некоторая HTML-разметка как таковая:

    <select id="select_titleOfSelect-1212_01" name="titleOfSelect-1212" 
        <option value="ONE"></option>
        <option value="TWO"></option>
        <option value="THREE"></option>
    </select>

Можно динамически генерировать несколько таких элементов выбора, в которых число после titleOfSelect всегда может быть другим. Также «01» будет увеличиваться на 1, если на одной странице генерируется более одного выбора.

Я смог нажать на них, используя это:

.click('select[id^="titleOfSelect-"] option[value='ONE']')

Как я могу нажать на 2-й, 3-й, и так далее ... выбрать элемент настраницу, если их больше одного?

Я использую Javascript с Selenium

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Вы не ищете элемент на основе его идентификатора, если идентификатор генерируется случайным образом. Вы должны будете использовать XPath или CSS селектор и проявить творческий подход.

Вот как я бы щелкнул по опциям:

// option 1
driver.findElement(By.xpath("//select/option[@value='ONE']")).click();

// option two
driver.findElement(By.xpath("//select/option[@value='TWO']")).click();

// etc..

Или, если вы не хотите использовать value, вы можете использовать индекс:

// click first option
driver.findElement(By.xpath("//select/option[1]")).click();

// click second option
driver.findElement(By.xpath("//select/option[2]")).click();

// click third option
driver.findElement(By.xpath("//select/option[2]")).click();

Если на странице несколько элементов select, вы можете попробовать выполнить запрос contains к заголовку:

//select[contains(@title, 'titleOfSelect')]/option[1]
0 голосов
/ 08 ноября 2019

Вы можете использовать :nth-of-type(), чтобы выбрать, какой SELECT вы получите, например,

select:nth-of-type(2) option[value="TWO"]

выберет опцию, которая содержит значение 'TWO' во втором SELECT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...