Найти элемент по атрибуту

Я пытаюсь найти элемент с атрибутом. Ну, я могу найти элементы с 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