Comment lire un texte à partir d'élément masqué avec Selenium WebDriver?
Je suis en train de lire l'exemple de la Chaîne de 1000
de caché <div>
comme ceci:
<div id="hidden_div" style="visibility:hidden">1000</div>
Je suis conscient que WebElement.getText()
ne fonctionne pas sur les éléments cachés dans le Sélénium 2 (WebDriver), j'ai donc cherché des solutions (comme celui-ci) et apparemment, le code suivant devrait fonctionner:
WebElement hiddenDiv = seleniumDriver.findElement(By.id("hidden_div"));
String n = hiddenDiv.getText(); //does not work (returns "" as expected)
String script = "return arguments[0].innerText";
n = (String) ((JavascriptExecutor) driver).executeScript(script, hiddenDiv);
Mais il ne fonctionne pas pour moi, la variable n
finit toujours comme null
. Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
EDIT: Oh, cela fonctionne.
Dans firefox.
Et donc cela.
J'ai essayé mais ça ne semble pas fonctionner avec Javascript. Démarrez le navigateur avec
Jquery comme mentionné ici. Comment faire pour utiliser JQuery dans le Sélénium? et utilisez le code suivant pour le script.
Cela fonctionne.
getText()
retourne une chaîne vide si l'élément n'est pas visible. C'est dans les deux cas différent du comportement lors de l'interaction avec les éléments cachés. Si vous essayez d'exécuterclick()
ousendKeys(...)
vous aurez une ElementNotVisibleException.python
sélénium?Pourrait être utile également:
Dans certains cas, il peut s'avérer utile pour obtenir le texte caché, ce qui peut être récupéré à partir de l'élément de
textContent
,innerText
ouinnerHTML
attribut, en appelantelement.attribute('attributeName')
.element.getAttribute("textContent")
a fonctionné pour moi.Voir plus de détails là ->
http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/
Appuyant sur les travaux de la déjà donné les réponses, j'ai créé cette méthode utilitaire (Java). C'est peut-être utile pour quelqu'un d'autre.
Essayer cette
Je suis tombé sur le même problème de lecture des éléments invisibles, mais je voulais en retour une WebElement objet d'approfondir l'analyse (et non pas simplement son texte).
Ce morceau de code répondu à mes besoins.
Je suis relativement nouveau pour le Sélénium (et à la programmation comme tout), mais je suis juste partage d'une solution qui a fonctionné pour moi.
Sélénium 2 n'a pas été conçu pour la manipulation d'éléments cachés de la visibilité directe. Vous ne serez pas en mesure de trouver l'ID ou le Sélecteur CSS, par exemple.
J'ai eu une situation avec un bot, où j'ai eu un tableau HTML avec beaucoup de itens, et lors du clic lors d'eux, une liste déroulante avec les cachés visibilité ouverte. Il était même dans un autre cadre.
C'est une situation particulière, mais je ne pouvais pas trouver aucune solution, j'ai donc choisi cette (mauvaise) un, mais qui fonctionne vraiment de façon constante, en dépit de la laide du code.
D'abord, vous devez
switchToDesiredFrame();
- entrez votredriver.switchTo.frame()
logique ici.Que:
La dataCells sont littéralement la
<td>
balises, et ils deviennentWebElements
dans une liste comme<td>
's sont les éléments de la liste en vertu de la<table>
"conteneur".Il a travaillé sur Chrome et Firefox pour moi, mais pas sur n'importe quel navigateur sans, ne sais pas exactement pourquoi. Si vous les gars à venir à travers quelque chose comme ça et d'avoir une solution plus élégante (probablement pas si difficile à trouver), merci de partager!
Je le conseille à utiliser:
Lorsque nous rencontrons un tel cas, la première chose à faire est d'essayer, de toute action qui permet de ne pas faire de changement sur cette page, comme le glisser-etc, puis de faire une image de l'interrupteur.
Essayer un
getText()
, si cela ne fonctionne pas, essayez-le au-dessus de la 2ème alternative.