web-dev-qa-db-fra.com

Élément de recherche sélénium basé sur une chaîne de texte ou un attribut

J'essaie que Selenium trouve un élément basé sur une chaîne qui peut être contenue dans le texte de l'élément ou n'importe quel attribut, et je me demande s'il y a un caractère générique que je peux implémenter pour capturer tout cela sans avoir à utiliser plusieurs conditions = OR logique. Ce que j'utilise en ce moment qui fonctionne est ...

driver.findElement(By.xpath("//*[contains(@title,'foobar') or contains(.,'foobar')]"));

Et je voulais savoir s'il y avait un moyen d'utiliser un caractère générique au lieu de l'attribut spécifique (@title) qui encapsule également le texte de l'élément comme la 2ème partie de la condition OR le fait.

12
user2150250

Cela donnera tous les éléments qui contiennent du texte foobar

driver.findElement(By.xpath("//*[text()[contains(.,'foobar')]]"));

Si vous voulez une correspondance exacte,

driver.findElement(By.xpath("//*[text() = 'foobar']"));

Ou vous pouvez exécuter Javascript en utilisant JQuery dans Selenium

Cela renverra tous les éléments Web contenant le texte du parent au dernier enfant, donc j'utilise le sélecteur jquery :last Pour obtenir le nœud le plus interne qui contient ce texte, mais cela peut ne pas toujours être exact, si vous avoir plusieurs nœuds contenant le même texte.

(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar'):last\").get(0);");

Si vous voulez une correspondance exacte pour ce qui précède, vous devez exécuter un filtre sur les résultats,

(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar')\").filter(function() {" +
    "return $(this).text().trim() === 'foobar'}).get(0);");

jQuery renvoie un tableau d'éléments, si vous n'avez qu'un seul élément Web sur la page avec ce texte particulier, vous obtiendrez un tableau d'un élément. Je fais .get(0) pour obtenir ce premier élément du tableau et le convertir en WebElement

J'espère que cela t'aides.

22
LINGS

Cela renverra l'élément avec le texte foobar

driver.findElement(By.xpath("//*[text()='foobar']"))
3
Shubhasmit Gupta