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?
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
/* 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;
}
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
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')]"));
Cela fonctionne avec Selenium vba
.FindElementsByXPath( "//*[contains(@class, 'unique-string')]" )