Найти элемент по атрибуту
Я пытаюсь найти элемент с атрибутом. Ну, я могу найти элементы с Id, tagName, Xpath и всеми другими предопределенными методами в Selenium. Но я пытаюсь написать метод, который специально возвращает WebElement, учитывая имя атрибута и значение в качестве входных данных.
List<WebElement> elements = webDriver.findElements(By.tagName("Attribute Name"));
for(WebElement element : elements){
if(element.getText().equals("Value of Particular Attribute")){
return element;
}
else{
return null;
}
}
Предполагая, что XPath не является вариантом, есть ли еще какие-либо другие способы сделать это?
Ответы
Ответ 1
Вы можете легко выполнить эту задачу с помощью CSS.
Формула:
element[attribute='attribute-value']
Итак, если у вас есть,
<a href="mysite.com"></a>
Вы можете найти его, используя:
By.cssSelector("a[href='mysite.com']");
это работает с использованием любого атрибута.
На этой странице приведена хорошая информация о том, как сформулировать эффективные селектора css и сопоставить их атрибуты: http://ddavison.io/css/2014/02/18/effective-css-selectors.html
Ответ 2
Я не понимаю вашего требования:
Предполагая, что XPath не вариант...
Если это было неправильное предположение с вашей стороны, то XPath - идеальный вариант!
webDriver.findElements(By.xpath("//element[@attribute='value']"))
Конечно, вам нужно заменить element
, attribute
и value
вашими фактическими именами. Вы также можете найти "любой элемент" с помощью шаблона:
webDriver.findElements(By.xpath("//*[@attribute='value']"))
Ответ 3
Вместо этого используйте селектор CSS:
List<WebElement> elements = webDriver.findElements(By.cssSelector("*[attributeName='value']"));
Изменить: селектора CSS вместо XPath