web-dev-qa-db-fra.com

Comment obtenir le code HTML d'un WebElement dans Selenium

Je suis nouveau aux tests donc mes excuses à l'avance si ma question semble un peu primaire.

J'utilise Selenium et Java pour écrire un test.

Je sais que webElement.getAttribute("innerHTML"); m'apporte le innerHTML, par exemple pour l'élément ci-dessous:

<a href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button" style="position: absolute; border-radius: 0px 0px 4px 4px;">
    <span class="ui-icon ui-icon-closethick">close</span>
</a>

il renvoie:

<span class="ui-icon ui-icon-closethick">close</span>

mais j'ai besoin de quelque chose qui m'apporte l'attribut interne de WebElement "a", quelque chose comme ci-dessous:

href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button" style="position: absolute; border-radius: 0px 0px 4px 4px;"
23
LoveLovelyJava

Si vous voulez le HTML de l'élément lui-même, vous pouvez utiliser

webElement.getAttribute("outerHTML");

Il renverra le code HTML de l'élément lui-même ainsi que tous les éléments enfants. Je ne sais pas si c'est exactement ce que vous voulez. Je ne pense pas qu'il existe un moyen d'obtenir uniquement le code HTML de l'élément sélectionné.

28
JeffC

Vous pouvez lire l'attribut innerHTML pour obtenir la source du contenu de l'élément ou externalHTML pour la source avec l'élément actuel.

Exemple: - Supposons maintenant que votre élément soit comme ci-dessous

<tr id="myRow"><td>A</td><td>B</td></tr>

Sortie élément interne

<td>A</td><td>B</td>

Sortie de l'élément extérieur

<tr id="myRow"><td>A</td><td>B</td></tr>

Exemple en direct: -

http://www.Java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm

Vous trouverez ci-dessous la syntaxe qui nécessite selon une liaison différente. Modifiez innerHTML en outerHTML selon les besoins.

Python:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

C #:

element.GetAttribute("innerHTML");

Rubis:

element.attribute("innerHTML")

JS:

element.getAttribute('innerHTML');

Si vous voulez utiliser le code HTML de la page entière ci-dessous: -

driver.getPageSource();
7
Shubham Jain
webElement.getAttribute("href");
webElement.getAttribute("class");
.
.
.

ou pour les obtenir tous:

Object[] attr = ((JavascriptExecutor)seleniumdriver).executeScript("return arguments[0].attributes);", webElement);
4
tdrury

Si nous avons ceci:

<a href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button"
style="position: absolute; border-radius: 0px 0px 4px 4px;">
<span class="ui-icon ui-icon-closethick">close</span></a>

et nous devons obtenir tous les attributs de "a" qui seront les suivants:

href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button"
    style="position: absolute; border-radius: 0px 0px 4px 4px;"

Nous pouvons utiliser ce code:

webElement.getAttribute("outerHTML").split(">")[0]

où webElement est "a".

Ou plus précisément:

String s = we.getAttribute("outerHTML");

s = s.substring(2, s.indexOf(">"));
2
LoveLovelyJava

Essayez la fonction .getAttribute("innerHTML"); pour extraire la source sous forme de chaîne

Exemple de code:

String source = driver.findElement(By.xpath("/html/body/script[6]")).getAttribute("innerHTML");
2
fahad

J'obtiens généralement une source de l'élément dans mes cas de test pour l'affirmer. Voir le code suivant dans lequel je teste s'il s'agit d'une liste déroulante à option unique.

Dans le code suivant, j'ai d'abord obtenu le code source externe de l'élément et vérifié s'il contient ou non le mot-clé "Multiple".

   @FindBy(xpath="//div[@class='col-lg-10']//div[1]//div[1]//div[2]//select[1]")
   WebElement element;
   Boolean status = element.getAttribute("outerHTML").contains("Multiple");
   Assert.assertTrue(!status, "User can select only one value at a time in drop down field.");

Dans mon cas, il a affirmé qu'il n'y a pas de mot-clé "Multiple" dans le code HTML externe de la balise de sélection et que la liste déroulante est une liste déroulante à sélection unique.

0
Usman Kokab