Возможно ли найти элемент путем частичного совпадения id в Selenium
Я пытаюсь найти элементы с созданными идентификаторами, в которых известна часть идентификатора; например:
id="page_x002e_x0023_default-create-firstname"
в котором известны последние 3 слова (_default-create-firstname), но все, что предшествует этому, может быть изменено.
Возможно ли это?
Ответы
Ответ 1
Вы можете применить концы с помощью селектора CSS:
By.cssSelector("[id$=default-create-firstname]")
Обновить
Прошло некоторое время, так как ответ был опубликован. Здесь некоторое обновление со страницы разработчика mozilla и комментариев ниже:
Новое использование By.css вместо By.cssSelector
By.css("[id$=default-create-firstname]")
Также рассмотрим четыре возможности
- начиная с
- в любом месте внутри
- везде внутри независимо от капитализации
- с
/* Internal links, beginning with "#" */
a[href^="#"] {
background-color: gold;
}
/* Links with "example" anywhere in the URL */
a[href*="example"] {
background-color: silver;
}
/* Links with "insensitive" anywhere in the URL,
regardless of capitalization */
a[href*="insensitive" i] {
color: cyan;
}
/* Links that end in ".org" */
a[href$=".org"] {
color: red;
}
Ответ 2
Если вы хотите спуститься по пути xpath, вы можете использовать contains()
, например:
//*[contains(@id,'_default-create-firstname')]
Это приведет к поиску всей страницы для идентификатора, содержащего текст "_default-create-firstname". Его можно легко сделать более конкретным
Ответ 3
Вы можете попробовать это в Java-Selenium: вы можете использовать либо ends-with()
, либо contains()
. Я думаю, что оба должны работать.
driver.findElement(By.xpath("//*[ends-with(@id,'_default-create-firstname')]"));
driver.findElement(By.xpath("//*[contains(@id, '_default-create-firstname')]"));
Ответ 4
Это работает с selenium vba
.FindElementsByXPath( "//*[contains(@class, 'unique-string')]" )