HTML normalise automatiquement les espaces dans les éléments, ignorant les espaces de début / de fin et convertissant les espaces supplémentaires, les tabulations et les retours à la ligne en un seul espace. Lorsque Selenium lit le texte de la page, il tente de dupliquer ce comportement, vous pouvez donc ignorer tous les onglets et nouvelles lignes de votre HTML et faire des assertions en fonction de l'apparence du texte dans le navigateur une fois rendu. Nous faisons cela en remplaçant tous les espaces non visibles (y compris l'espace insécable "
") par un seul espace. Toutes les nouvelles lignes visibles ( <br>
, <p>
et les <pre>
nouvelles lignes formatées) doivent être conservées.
Nous utilisons la même logique de normalisation sur le texte des tableaux de cas de test HTML Selenese. Cela présente de nombreux avantages. Tout d'abord, vous n'avez pas besoin de regarder la source HTML de la page pour déterminer quelles devraient être vos affirmations; Les
symboles " " sont invisibles pour l'utilisateur final, et vous ne devriez donc pas avoir à vous en soucier lors de l'écriture des tests Selenese. (Vous n'avez pas besoin de mettre des
marqueurs " " dans votre scénario de test pour assertText sur un champ qui contient "
".) Vous pouvez également mettre des nouvelles lignes et des espaces supplémentaires dans vos <td>
balises Selenese
; puisque nous utilisons la même logique de normalisation sur le cas de test que sur le texte, nous pouvons nous assurer que les assertions et le texte extrait correspondent exactement.
Cela crée un petit problème dans les rares occasions où vous voulez / avez vraiment besoin d'insérer des espaces supplémentaires dans votre scénario de test. Par exemple, vous devrez peut-être saisir du texte dans un champ comme celui-ci: " foo
". Mais si vous écrivez simplement <td>foo </td>
dans votre cas de test Selenese, nous remplacerons vos espaces supplémentaires par un seul espace.
Ce problème a une solution de contournement simple. Nous avons défini une variable en Selenese
${space}
, dont la valeur est un seul espace. Vous pouvez utiliser ${space}
pour insérer un espace qui ne sera pas automatiquement coupé, comme ceci:
<td>foo${space}${space}${space}</td>
. Nous avons également inclus une variable
${nbsp}
, que vous pouvez utiliser pour insérer un espace insécable.
Notez que XPaths ne normalise pas les espaces comme nous le faisons. Si vous avez besoin d'écrire un XPath comme
//div[text()="hello world"]
mais le code HTML du lien est vraiment « hello world
», vous aurez besoin d'insérer un véritable «
» dans votre cas de test Selenese pour l' obtenir pour correspondre, comme ceci:
//div[text()="hello${nbsp}world"]
.