Obtenir le localisateur de déjà trouvé WebElement
Est-il un moyen élégant pour obtenir le localisateur de Sélénium WebElement, que j'ai déjà trouvé/identifié?
Pour être clair sur la question: je veux un "localisateur" utilisé pour trouver l'élément. Je suis dans ce cas pas intéressé par un attribut spécifique ou d'un localisateur comme le css-locator.
Je sais que j'ai pu analyser le résultat d'une WebElement méthode toString ():
WebElement element = driver.findElement(By.id("myPreciousElement"));
System.out.println(element.toString());
Sortie serait par exemple:
[[FirefoxDriver: firefox sur WINDOWS (....)] -> id: myPreciousElement]
si vous avez trouvé votre élément par xpath:
WebElement element = driver.findElement(By.xpath("//div[@someId = 'someValue']"));
System.out.println(element.toString());
Ensuite, votre sortie sera:
[[FirefoxDriver: firefox sur WINDOWS (....)] -> xpath: //div[@someId = 'someValue']]
J'ai donc actuellement écrit ma propre méthode qui analyse cette sortie et me donne le "recréé" localisateur.
MAIS est-il une façon plus élégante déjà mis en œuvre dans le Sélénium pour obtenir le localisateur utilisé pour trouver l'élément?
Je ne pouvais pas trouver un la mesure.
Si vous êtes sûr, il n'y a aucun hors de la boîte, pouvez-vous penser à une raison pourquoi les API de créateurs pourrait ne pas fournir cette fonctionnalité?
*Malgré le fait que cela n'a rien à voir avec la question, si quelqu'un se demande pourquoi vous avez besoin de cette fonctionnalité, juste 2 exemples:
- si vous utilisez PageFactory vous probablement n'aura pas les repères en tant que membre des variables dans votre classe de la Page, mais vous pourriez en avoir besoin plus tard, lorsque l'on travaille avec les éléments de la page.
- vous travaillez avec les Api de personnes qui ont juste utiliser la Page de l'Objet Modèle sans PageFactory et donc vous attendre à la main sur les locators au lieu de l'élément lui-même.*
ne pense pas que c'est un doublon avec votre proposition de question, parce que je suis particulièrement intéressé Par le localisateur. Comme vous avez répondu à cette question, ce serait plus logique alors de récupérer le "css" de localisation, ce qui pourrait ne pas exister, mais il y a toujours un localisateur pour récupérer un élément
Avez-vous jamais comprendre cela? Je suis l'aide de la PageFactory la mise en œuvre et ont pratiquement aucun moyen de vérifier qu'un élément est affiché ou non.
OriginalL'auteur drkthng | 2015-07-28
Vous devez vous connecter pour publier un commentaire.
Réponse est Pas. Vous ne pouvez pas extraire un
By
à partir d'un déjà trouvé WebElement par défaut.Cela étant dit, il est possible de mettre en œuvre une solution personnalisée, mais le Sélénium n'offre pas cette out-of-the-box.
Considérer le suivant, sur le "pourquoi"..
vous avez déjà la
By
objet, de sorte que vous n'avez pas besoin d'appeler quelque chose commee.getBy()
Je pourrais mettre en place quelque chose de ce genre dans l'avenir, mais pas de promesses. De nouveau - c'est juste un peu de sucre.
une idée de quoi cela peut-il n'est pas fourni par l'API? Vous pensez que c'est intentionnel, pour une raison quelconque?
eh bien, je suis en fait un responsable du projet, et il n'est pas mis en œuvre parce qu'il n'y a généralement pas de raison d'avoir besoin de trouver de la par d'un élément. plus facile à dire
WebElement theElement = d.findElement(b)
et vous avez déjàb
enregistré quelque part. Je pourrais le mettre en œuvre, mais ce serait prendre un certain temps. nous sommes accueillant des pull requests 🙂 github.com/seleniumhq/seleniumMais pour PageObject et PageFactory modèle, La
By
est défini dans l'annotation, l'élément lui-même ne peut pas savoirBy
Salut, presque 2 ans maintenant, depuis que cette question a été posée. Pourrais-je savoir si une mise en œuvre de ce qui a été fait? Merci!
OriginalL'auteur sircapsalot
Non, il n'y a pas. J'ai mis en place une solution possible comme un proxy:
Je pense qu'ils ont omis cette raison WebElements peut être localisé par des séquences complexes. Par exemple,
WebElement header = driver.findElement(By.id("table-id")).findElement(By.tagName("table")).findElements(By.xpath(".//th")).get(0);
. Comment voulez-vous enregistrer les références à tous ces repères?OriginalL'auteur Zymus
Pour moi travaillé avec les communes-lang3
Pour web à distance de l'élément d'utiliser la méthode comme:
OriginalL'auteur alexloiko