Traiter avec id en double dans selenium webdriver
Je suis en train d'automatiser certaines des tests en utilisant selenium webdriver. Je fais affaire avec une tierce partie fournisseur de connexion (OAuth) qui est à l'aide de code en double dans leur code html. En conséquence, je n'arrive pas à "trouver" les champs de saisie correctement. Quand je viens de sélectionner sur un id, j'ai pas le bon.
Cette question a déjà répondu pour JQuery. Mais je voudrais une réponse (je suis en supposant à l'aide de Xpath) qui va travailler dans Selenium webdriver.
Sur d'autres questions au sujet de cette question, les réponses généralement dire "vous ne devriez pas avoir de doublons id dans le html". Prédication pour le choeur. Je ne suis pas dans le contrôle de la page web en question. S'il l'était, je voudrais utiliser les class et id correctement et simplement de résoudre le problème de cette façon.
Puisque je ne peux pas le faire. Quelles options dois-je avoir avec xpath etc?
OriginalL'auteur ftrotter | 2012-08-14
Vous devez vous connecter pour publier un commentaire.
vous pouvez le faire par le conducteur.find_element_by_id, par exemple ur double "duplicate_ID" est à l'intérieur "div_ID" qui est unique :
pour d'autres dupliquer le code dans un autre div :
OriginalL'auteur Roshan
Cette expression XPath:
sélectionne tous
div
éléments dans le document XML, la valeur de la chaîne dontid
attribut est la chaîne de caractères "quelque chose".Cette expression Xpath:
produit le numéro de la
div
éléments sélectionnés par la première expression XPath.Et cette expression XPath:
sélectionne le troisième (dans l'ordre du document)
div
élément qui est sélectionné par la première expression XPath ci-dessus.Généralement:
sélectionne le
$k
-th telsdiv
élément ($k
doit être remplacé par un entier positif).Équipé avec cette connaissance, on peut obtenir un spécifique
div
dontid
attribut a la valeur de chaîne "quelque chose".OriginalL'auteur Dimitre Novatchev
La langue qui travaillez-vous? Dublicate id ne devrait pas être un problème puisque vous pouvez pratiquement prendre n'importe quel attribut de ne pas juste l'id de la balise à l'aide de xpath. La syntaxe diffère légèrement dans les autres langues (laissez-moi savoir si vous voulez quelque chose d'autre que Ruby), mais c'est comment vous le faites:
La façon dont vous aller à ce sujet de la construction de la xpath locator est le suivant:
De le code html que vous pouvez choisir n'importe quel attribut:
Par exemple, disons que vous voulez consturct votre xpath avec le code html ci-dessus (Google de la zone de recherche) à l'aide de nom attribut. Votre xpath sera:
En d'autres termes, lorsque l'id est le même, il suffit de saisir un autre attribut disponible!
Amélioration:
Pour éviter fragile xpath locators telles que l'ordre dans le document XML (qui peut changer facilement), vous pouvez utiliser quelque chose d'encore plus robuste. Deux xpath locators au lieu d'un. Cela peut également être utile lorsque vous traitez avec des balises hmtl qui sont vraiment similaires. Vous pouvez rechercher un élément par 2 de ses attributs comme ceci:
ou dans le plus pur xpath un liner si vous préférez:
Alternativement (et à condition que votre xpath retournera seulement un élément unique), vous pourrez passer une étape de plus élevé dans le niveau d'abstraction; omettent complètement les valeurs de l'attribut:
//input[@id and @maxlength]
OriginalL'auteur Xwris Stoixeia
Il ne figure pas au http://selenium-python.readthedocs.io/locating-elements.html mais je suis en mesure d'accéder à une méthode
find_elements_by_id
Cela renvoie une liste de tous les éléments avec le code en double.
OriginalL'auteur Stephen Lead
vous devez utiliser le pilote.findElement(Par.xpath (), mais lors de la localisation de l'élément avec firebug vous devez sélectionner le chemin d'accès absolu pour un élément particulier au lieu d'obtenir le chemin d'accès relatif est de cette façon, vous obtiendrez l'élément même de doublons d'ID
OriginalL'auteur Hassan