Wie zu Lesen text von hidden-element mit Selenium WebDriver?
Ich versuche zu Lesen den Beispiel-String 1000
aus einem versteckten <div>
wie diese:
<div id="hidden_div" style="visibility:hidden">1000</div>
Ich bin mir bewusst, dass WebElement.getText()
funktioniert nicht auf versteckte Elemente im Selen 2 (WebDriver), also habe ich nach Lösungen gesucht (wie diese) und anscheinend ist der folgende code sollte funktionieren:
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);
Aber es funktioniert nicht für mich, die variable n
immer endet als null
. Was mache ich falsch?
InformationsquelleAutor dokaspar | 2012-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: Oh das funktioniert.
In firefox.
Und so auch dieses.
Ich versuchte, so gut, aber es scheint nicht zu funktionieren mit reinem Javascript. Starten Sie den browser mit
Jquery wie hier erwähnt. Wie JQuery in Selen? und verwenden Sie folgenden code für das Skript.
Dieser funktioniert.
Bei älteren Selen-Versionen (mindestens 2,25), war es möglich, den text eines hidden-element. In neueren Versionen (zumindest 2.39),
getText()
gibt eine leere Zeichenfolge zurück, wenn das element nicht sichtbar ist. Dies ist in beiden Fällen von dem Verhalten bei der Interaktion mit ausgeblendeten Elementen. Wenn Sie versuchen, auszuführenclick()
odersendKeys(...)
erhalten Sie eine ElementNotVisibleException.Nur der Vollständigkeit halber: Die WebDriver FAQ können Sie Lesen unter code.google.com/p/selenium/wiki/FrequentlyAskedQuestions .
Antwort sollte sein, das akzeptiert man.
InformationsquelleAutor specialscope
Nützlich sein könnten:
In einigen Fällen kann es nützlich sein, um die versteckten text,, die abgerufen werden können-element
textContent
,innerText
oderinnerHTML
Attribut durch den Aufrufelement.attribute('attributeName')
.element.getAttribute("textContent")
für mich gearbeitet.Sehen, mehr details gibt es ->
http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/
element.getAttribute("textContent").trim() gab mir genau das, was ich brauchte.
Gute Antwort! Ich hatte mehr Glück mit innerText als textContent, weil innerText vereint mehrere Zeilenumbrüche und Leerzeichen in einem einzigen Raum, während die textContent nicht.
genial, sir. sehr geschätzt 🙂
InformationsquelleAutor user3152984
Aufbauend auf der Arbeit des bereits gegebenen Antworten habe ich das utility-Methode (Java). Vielleicht ist das hilfreich für jemand anderes.
InformationsquelleAutor Tim Büthe
Versuchen, diese
InformationsquelleAutor Abhigyan
Stieß ich auf das gleiche problem zu Lesen "unsichtbare Elemente" aber ich wollte wieder ein WebElement Objekt zu tun weitere Analyse (nicht nur text).
Diesem Stück code erfüllt meine Anforderung.
InformationsquelleAutor prav
Ich bin relativ neu auf Selen (und auf die Programmierung als ganzes), aber ich bin nur teilen eine Lösung, die für mich gearbeitet.
Selen 2 wurde nicht für die Handhabung von Elementen mit verborgenen Sichtbarkeit direkt. Sie werden nicht in der Lage, es zu finden-ID oder CSS-Selektor, zum Beispiel.
Ich hatte eine situation mit einem bot, wo ich eine HTML-Tabelle mit vielen itens, und wenn Sie, wenn Sie eine dropdown-Liste mit versteckter Sichtbarkeit geöffnet. Es war auch in einem anderen Rahmen.
Es ist eine spezielle situation, aber ich konnte nicht finden keine Lösung, also entschied ich mich für diese (schlecht), aber das funktioniert wirklich konsequent, trotz der hässlichen code.
Zuerst sollten Sie
switchToDesiredFrame();
- geben Sie Ihredriver.switchTo.frame()
Logik hier.Als:
Den dataCells sind buchstäblich die
<td>
- tags, und Sie werdenWebElements
in einer Liste nur als<td>
's sind die Elemente in einer Liste unter der<table>
"container".Klappte es auf Chrome und Firefox für mich, aber nicht auf einem headless browser, nicht genau zu wissen, warum. Wenn Sie Leute kommen und über etwas und haben eine elegantere Lösung gefunden (wohl nicht so schwer zu finden ist), bitte teilen!
InformationsquelleAutor nickballeste
Ich empfehlen Sie verwenden:
InformationsquelleAutor BOB
Wenn wir in einem solchen Fall, das erste, was wir tun sollten, ist zu versuchen, jede Handlung, die nicht machen jede änderung auf dieser Seite, wie ziehen etc, dann tun Sie einen frame wechseln.
Versuchen, eine
getText()
, wenn das nicht funktioniert, versuchen Sie, die oben als die 2. alternative.InformationsquelleAutor anirules twenty