HTML automatycznie normalizuje białe znaki w elementach, ignorując początkowe / końcowe spacje i konwertując dodatkowe spacje, tabulatory i znaki nowej linii w jedną spację. Kiedy Selenium odczytuje tekst ze strony, próbuje powielić to zachowanie, więc możesz zignorować wszystkie tabulatory i znaki nowej linii w kodzie HTML i wykonywać potwierdzenia na podstawie tego, jak tekst wygląda w przeglądarce po renderowaniu. Robimy to, zastępując wszystkie niewidoczne białe znaki (w tym nierozdzielającą spację „
”) pojedynczą spacją. Wszystkie widoczne znaki nowej linii ( <br>
, <p>
i <pre>
sformatowane nowe linie) powinny być zachowane.
Używamy tej samej logiki normalizacji w tekście tabel przypadków testowych HTML Selenese. Ma to wiele zalet. Po pierwsze, nie musisz zaglądać do źródła HTML strony, aby dowiedzieć się, jakie powinny być twoje twierdzenia;
Symbole „ ” są niewidoczne dla użytkownika końcowego, więc nie powinieneś się o nie martwić pisząc testy seleńskie. (Nie musisz umieszczać
znaczników „ ” w swoim przypadku testowym, aby assertText w polu zawierającym „
”.) Możesz także umieścić dodatkowe znaki nowej linii i spacje w swoich <td>
tagach seleńskich
; ponieważ używamy tej samej logiki normalizacji w przypadku testowym, co w przypadku tekstu, możemy zapewnić, że potwierdzenia i wyodrębniony tekst będą dokładnie pasować.
Stwarza to pewien problem w tych rzadkich przypadkach, gdy naprawdę chcesz / musisz wstawić dodatkowe białe znaki w swoim przypadku testowym. Na przykład może być konieczne wpisanie tekstu w takim polu: „ foo
”. Ale jeśli po prostu napiszesz <td>foo </td>
w swoim przypadku testowym Selenese, zastąpimy Twoje dodatkowe spacje tylko jedną spacją.
Ten problem ma proste obejście. W Selenese zdefiniowaliśmy zmienną
${space}
, której wartością jest pojedyncza spacja. Można użyć ${space}
, aby wstawić spację, które nie zostaną automatycznie przycięte, tak:
<td>foo${space}${space}${space}</td>
. Dołączyliśmy również zmienną
${nbsp}
, której można użyć do wstawienia nierozdzielającej spacji.
Zwróć uwagę, że XPath nie normalizują białych znaków tak jak my. Jeśli trzeba napisać XPath jak
//div[text()="hello world"]
ale HTML linku jest naprawdę „ hello world
”, trzeba włożyć prawdziwy „
” do swojego Selenese przypadku testowego, aby ją dopasować, tak:
//div[text()="hello${nbsp}world"]
.