Unterschied zwischen der Selenium getText () -Methode und der innerText-Eigenschaft eines Elements

Sep 26 2020

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

3 MichalDobrzycki Sep 26 2020 at 04:07

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 ...;)