Comment trouver unique les sélecteurs d'éléments sur les pages avec ExtJS pour une utilisation avec du Sélénium?
Je suis en utilisant le Sélénium avec Firefox Webdriver de travailler avec des éléments sur une page unique
CSS Id (à chaque chargement de page), mais le Id changer à chaque fois donc je suis incapable de les utiliser pour localiser un élément. C'est parce que la page est une application web construit avec ExtJS.
Je suis en train d'utiliser Firebug pour obtenir l'élément de l'information.
J'ai besoin de trouver un unique xPath ou le sélecteur si je peux les sélectionner chaque élément individuellement avec le Sélénium.
Lorsque j'utilise Firebug pour copier le xPath-je obtenir une valeur comme ceci:
//*[@id="ext-gen1302"]
Cependant, la prochaine fois que la page est chargée, elle ressemble à ceci:
//*[@id="ext-gen1595"]
Sur cette page chaque élément a ce format d'ID, de sorte que le CSS ID ne peut pas être utilisé pour trouver l'élément.
Je veux obtenir le xPath qui est en fonction de sa position dans le DOM, mais Firebug ne renvoie l'ID de xPath, car il est unique pour l'exemple de la page.
/html/body/div[4]/div[3]/div[4]/div/div/div/span[2]/span
Comment puis-je obtenir Firebug (ou un autre outil qui fonctionne à une vitesse semblable) pour me donner un unique sélecteur qui peut être utilisé pour trouver l'élément Sélénium, même après l'ext-gen changements d'identité?
Juste essayé, l'outil finit par obtenir la même valeur que Firebug copie de xPath.
Je ne recommanderais pas à l'aide de la longue xpath en termes de position dans les DOM; ils s'avèrent peu fiables, si quoi que ce soit d'autre dans le code html de modification de la structure. Il y a probablement un meilleur moyen d'identifier l'élément; pouvez-vous poster une partie de votre code html, afin de pouvoir offrir des suggestions?
OriginalL'auteur AdnanEK | 2013-08-02
Vous devez vous connecter pour publier un commentaire.
Une autre victime de ExtJS INTERFACE d'automatisation de test, voici mes conseils spécifiquement pour les tests ExtJS. (Cependant, ce ne sera pas répondre à la question décrite dans le titre)
Astuce 1: Ne jamais utiliser illisible XPath comme
/div[4]/div[3]/div[4]/div/div/div/span[2]/span
. Un petit changement de code source peut conduire à DOM de changement de la structure. Cela va causer d'énormes coûts de maintenance.Astuce 2: profiter de véritable auto-généré partielle id et les noms de classe.
Par exemple, cette ExtJS grille exemple:
By.cssSelector(".x-grid-view .x-grid-table")
, ce serait pratique. S'il y a plusieurs grilles, essayez de les indexer ou de localiser identifiables de l'ancêtre, commeBy.cssSelector("#something-meaningful .x-grid-view .x-grid-table")
.Astuce 3: à Créer des noms de classe dans le code source. ExtJS fournit
cls
ettdCls
pour les noms de classe personnalisés, de sorte que vous pouvez ajoutercls:'testing-btn-cancel'
dans votre code source, et d'obtenir parBy.cssSelector(".testing-btn-cancel")
.Tip3 est le meilleur et le dernier. Si vous n'avez pas accès au code source, parlez-en à votre gestionnaire, le Sélénium UI automation devrait vraiment être un développeur d'emploi pour quelqu'un qui peut modifier le code source, plutôt qu'à un utilisateur final comme testeur.
OriginalL'auteur Yi Zeng
Je recommande l'utilisation de CSS dans ce cas, en faisant
By.cssSelector("span[id^='ext-gen'])
La déclaration ci-dessus signifie "sélectionnez un élément span avec un id qui commence avec ext-gen". (S'il en a besoin pour être plus précis, vous pouvez répondre, et je vais voir si je peux vous aider).
Alternativement, si vous souhaitez utiliser XPath, regardez cette réponse: Xpath pour la sélection de html id, y compris de nombre aléatoire
le ci-dessus sélecteur sélectionnez tout ce qui commence avec ext-gen. Il n'a pas d'importance ce qui suit, aussi longtemps qu'il commence avec ext-gen
J'ai besoin d'être en mesure de sélectionner des éléments uniques.
OriginalL'auteur Nathan Merrill
Bien qu'il n'est pas souhaité, dans certains cas, comme mentionné ci-dessus, vous pouvez l'analyser à travers les éléments et de générer xpath id.
Un autre wrapper pour générer des identifiants de Document est publié à: http://scottizu.wordpress.com/2014/05/12/generating-unique-ids-for-webelements-via-xpath/
OriginalL'auteur Scott Izu