web-dev-qa-db-fra.com

Rechercher élément par attribut

J'essaie de trouver un élément avec Attribute. Eh bien, je peux trouver des éléments avec Id, tagName, Xpath et toutes les autres méthodes prédéfinies dans Selenium. Mais, j'essaie d'écrire une méthode qui renvoie spécifiquement WebElement, à l'aide du nom d'attribut et de la valeur en entrée.

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;
    }
}

En supposant que XPath ne soit pas une option, existe-t-il d'autres moyens plus efficaces de procéder?

31
Kishore Banala

Vous pouvez facilement accomplir cette tâche avec CSS.

La formule est la suivante:

element[attribute='attribute-value']

Donc si vous avez,

<a href="mysite.com"></a>

Vous pouvez le trouver en utilisant:

By.cssSelector("a[href='mysite.com']");

cela fonctionne en utilisant n'importe quel attribut possible.

Cette page donne ici de bonnes informations sur la manière de formuler des sélecteurs CSS efficaces et de faire correspondre leurs attributs: http://ddavison.io/css/2014/02/18/effective-css-selectors.html

54
ddavison

Je ne comprends pas votre exigence:

En supposant que XPath n'est pas une option ...

S'il ne s'agissait que d'une hypothèse incorrecte, alors XPath est l'option parfaite!

webDriver.findElements(By.xpath("//element[@attribute='value']"))

Bien sûr, vous devez remplacer element, attribute et value par vos noms actuels. Vous pouvez également trouver "n'importe quel élément" en utilisant le caractère générique:

webDriver.findElements(By.xpath("//*[@attribute='value']"))
20
SiKing

Utilisez plutôt les sélecteurs CSS:

List<WebElement> elements = webDriver.findElements(By.cssSelector("*[attributeName='value']"));

Edit: sélecteurs CSS au lieu de XPath

12
Sizik