Unterschied zwischen der Selenium getText () -Methode und der innerText-Eigenschaft eines Elements
Ich versuche, den Text eines Elements mit der Selenium getText () -Methode und der innerText-Eigenschaft eines Elements abzurufen und die Ausgabe zu vergleichen.
HTML Quelltext:
<div>
<h1> DEF <p> Demo Shot <span> Taken by me </span></p> </h1>
</div>
Selencode:
System.out.println(driver.findElement(By.xpath("//h1")).getText());
**Output:**
DEF
Demo Shot Taken by me
System.out.println(driver.findElement(By.xpath("//h1")).getAttribute("innerText"));
**Output:**
DEF
Demo Shot Taken by me
Gemäß dem Selenium-Dokument:
Die Methode getText () ruft den sichtbaren (dh nicht durch CSS ausgeblendeten) innerText dieses Elements, einschließlich der Unterelemente, ohne führende oder nachfolgende Leerzeichen ab.
Ich gehe also davon aus, dass beide Ausgänge gleich sein sollten. In diesem Fall ist die Ausgabe von getText () und getAttribute ("innerText") jedoch völlig anders. Irgendein Grund?
Antworten
Es macht etwas anderes. Die Java-Implementierung zeigt:
@Override
public String getAttribute(String name) {
return stringValueOf(
execute(DriverCommand.GET_ELEMENT_ATTRIBUTE(id, name))
.getValue());
}
und
@Override
public String getText() {
Response response = execute(DriverCommand.GET_ELEMENT_TEXT(id));
return (String) response.getValue();
}
Darüber hinaus rufen sie verschiedene W3C-APIs auf, von denen die erste: Get Element Attribute und die zweite: Get Element Text .
Ich denke (nicht 100% sicher) eine Ebene tiefer nennen sie verschiedene Dinge in DOM. Man ruft an, .textContentwährend andere anrufen .innerText.
Jetzt kann es das gleiche sein oder nicht - abhängig vom Browsertyp, der Selenversion und so weiter ...;)