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"].