web-dev-qa-db-fra.com

Est-il possible de localiser élément par correspondance partielle avec id dans Selenium

J'essaie de localiser des éléments avec des identifiants générés dans lesquels une partie de l'identifiant est connue; par exemple:

id="page_x002e_x0023_default-create-firstname"

dans lequel les 3 derniers mots (_default-create-firstname) sont connus mais tout ce qui précède est sujet à modification. Est-ce possible?

35
Dark Star1

Vous pouvez appliquer un sélecteur CSS ends-with :

By.cssSelector("[id$=default-create-firstname]")

Mettre à jour

Quelque temps s'est écoulé depuis la publication de la réponse. Voici quelques mises à jour de la page de développeur mozilla liée et des commentaires ci-dessous:

Nouvelle utilisation By.css au lieu de By.cssSelector

By.css("[id$=default-create-firstname]")

Voir aussi les quatre possibilités de

  • commençant par
  • n'importe où à l'intérieur
  • n'importe où à l'intérieur quelle que soit la capitalisation
  • terminer par

/* 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;
}
50
alecxe

Si vous voulez emprunter la route xpath, vous pouvez utiliser contains(), comme ceci:

//*[contains(@id,'_default-create-firstname')]

Ceci recherchera dans toute la page un identifiant contenant le texte "_default-create-firstname". Il peut être facilement rendu plus spécifique

22
Cathal

Vous pouvez essayer ceci dans Java-Selenium: vous pouvez utiliser soit ends-with() ou contains(). Je pense que les deux devraient fonctionner.

driver.findElement(By.xpath("//*[ends-with(@id,'_default-create-firstname')]"));
driver.findElement(By.xpath("//*[contains(@id, '_default-create-firstname')]"));
18
Hari kishen

Cela fonctionne avec Selenium vba

 .FindElementsByXPath( "//*[contains(@class, 'unique-string')]" )
6
Jorge