HTML normalisiert Leerzeichen innerhalb von Elementen automatisch, ignoriert führende / nachfolgende Leerzeichen und konvertiert zusätzliche Leerzeichen, Tabulatoren und Zeilenumbrüche in ein einzelnes Leerzeichen. Wenn Selenium Text aus der Seite liest, versucht es, dieses Verhalten zu duplizieren, sodass Sie alle Registerkarten und Zeilenumbrüche in Ihrem HTML-Code ignorieren und Aussagen treffen können, die darauf basieren, wie der Text beim Rendern im Browser aussieht. Dazu ersetzen wir alle nicht sichtbaren Leerzeichen (einschließlich des nicht unterbrechenden Leerzeichens "
") durch ein einzelnes Leerzeichen. Alle sichtbaren Zeilenumbrüche ( <br>
, <p>
und <pre>
formatiert neue Linien) sollte beibehalten werden.
Wir verwenden dieselbe Normalisierungslogik für den Text von HTML-Selenese-Testfalltabellen. Dies hat eine Reihe von Vorteilen. Zunächst müssen Sie nicht auf die HTML-Quelle der Seite schauen, um herauszufinden, wie Ihre Aussagen lauten sollten. "
" Symbole sind für den Endbenutzer unsichtbar, sodass Sie sich beim Schreiben von Selenese-Tests keine Sorgen machen müssen. (Sie müssen keine "
" Markierungen in Ihren Testfall einfügen, um Text in ein Feld zu versetzen, das "
" enthält .) Sie können auch zusätzliche Zeilenumbrüche und Leerzeichen in Ihre Selenese- <td>
Tags einfügen
. Da wir im Testfall dieselbe Normalisierungslogik verwenden wie im Text, können wir sicherstellen, dass Zusicherungen und der extrahierte Text genau übereinstimmen.
Dies ist in den seltenen Fällen ein Problem, in denen Sie wirklich zusätzliche Leerzeichen in Ihren Testfall einfügen möchten / müssen. Beispielsweise müssen Sie möglicherweise Text in ein Feld wie das folgende eingeben: " foo
". Wenn Sie jedoch einfach <td>foo </td>
in Ihren Selenese-Testfall schreiben , ersetzen wir Ihre zusätzlichen Leerzeichen durch nur ein Leerzeichen.
Dieses Problem hat eine einfache Problemumgehung. Wir haben eine Variable in Selenese definiert
${space}
, deren Wert ein einzelnes Leerzeichen ist. Sie können ${space}
Folgendes verwenden , um ein Leerzeichen einzufügen, das nicht automatisch gekürzt wird :
<td>foo${space}${space}${space}</td>
. Wir haben auch eine Variable hinzugefügt
${nbsp}
, mit der Sie ein nicht unterbrechendes Leerzeichen einfügen können.
Beachten Sie, dass XPaths Leerzeichen nicht wie wir normalisieren. Wenn Sie einen XPath wie schreiben müssen,
//div[text()="hello world"]
der HTML- Code des Links jedoch wirklich " hello world
" ist, müssen Sie ein echtes "
" in Ihren Selenese-Testfall einfügen, damit er übereinstimmt :
//div[text()="hello${nbsp}world"]
.