Как найти элемент со случайным атрибутом id через Selenium - PullRequest
0 голосов
/ 19 марта 2019

Как найти элемент ввода по идентификатору, где последние 2 цифры меняются случайным образом?

<input id="start-time-hours-c31" class="focused" name="startTimeHours" value="" placeholder="hh" maxlength="2" type="text">

Ответы [ 6 ]

3 голосов
/ 19 марта 2019

Поскольку последние 2 символа атрибута id изменяются случайным образом, дополнительно необходимо учитывать также некоторые другие атрибуты , и вы можете использовать любой из следующих Стратегии локатора :

  • CSSSelector

    WebElement elem = driver.findElement(By.cssSelector("input[id^='start-time-hours-c'][name='startTimeHours']"));
    
  • * 1020 XPath *:

    WebElement elem = driver.findElement(By.xpath("//input[starts-with(@id, 'start-time-hours-c') and @name='startTimeHours']"));
    
3 голосов
/ 19 марта 2019

Быстрый ответ

Когда последние 2 цифры меняются случайным образом,

driver.findElement(By.xpath("//input[contains(@id,'start-time-hours-c')]"));

Используя 2 атрибута тега ввода,

driver.findElement(By.xpath("//input[@name='startTimeHours' and @class='focused']"));

Пожалуйста, сообщите нам, разрешил ли он ваш запрос.

1 голос
/ 19 марта 2019

Вы можете использовать любой из них:

 //input[starts-with(@id,'start-time-hours-c')]

(or)

 //input[contains(@id,'start-time-hours-c')]

если приведенное выше возвращает один webelement, то вы можете использовать его, или же, если он возвращает несколько элементов, перейдите для атрибута name в xpath.

1 голос
/ 19 марта 2019

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

xpath - // input [contsins (@ id, 'start-time-hours-c')]

1 голос
/ 19 марта 2019

Согласившись с ответом @TheSociety, вы также можете использовать как комбинацию имени и идентификатора

//input[contains(@id,'start-time-hours-c') and contains(@name,'startTimeHours')]
1 голос
/ 19 марта 2019

Поскольку html также имеет тег name, вы можете найти элемент с помощью этого тега имени, например:

WebElement element = driver.findElement(By.name("startTimeHours"));

И если тег name startTimeHours не является уникальным длястранице, затем вы можете найти элемент, используя следующий xpath:

WebElement element = driver.findElement(By.xpath("//input[contains(@id,'start-time-hours')]"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...