HTMLは、要素内の空白を自動的に正規化し、先頭/末尾のスペースを無視して、余分なスペース、タブ、改行を1つのスペースに変換します。Seleniumはページからテキストを読み取るときにこの動作を複製しようとするため、HTMLのすべてのタブと改行を無視し、レンダリング時にブラウザーでテキストがどのように表示されるかに基づいてアサーションを実行できます。これを行うには、すべての非表示の空白(改行しないスペース "
"を含む)を1つのスペースに置き換えます。すべての可視改行(<br>
、<p>
、および<pre>
フォーマットされた新しい行)が保存されなければなりません。
HTML Seleneseテストケーステーブルのテキストにも同じ正規化ロジックを使用します。これには多くの利点があります。まず、ページのHTMLソースを見て、アサーションがどうあるべきかを理解する必要はありません。"
"記号はエンドユーザーからは見えないため、セレン語のテストを作成するときにそれらについて心配する必要はありません。( "
"を含むフィールドでassertTextを実行するために、テストケースに" "マーカーを配置する必要はありません
。)Selenese <td>
タグに余分な改行とスペースを配置することもでき
ます。テストケースではテキストと同じ正規化ロジックを使用するため、アサーションと抽出されたテキストが正確に一致することを確認できます。
これにより、テストケースに余分な空白を挿入したい/必要とするまれな場合に、少し問題が生じます。たとえば、「foo
」のようなフィールドにテキストを入力する必要がある場合があります。ただし<td>foo </td>
、セレン語のテストケースに単純に書き込むと、余分なスペースは1つだけに置き換えられます。
この問題には簡単な回避策があります。Seleneseで変数を定義しました
${space}
。その値は単一のスペースです。を使用${space}
して、次のように、自動的にトリミングされないスペースを挿入
できます<td>foo${space}${space}${space}</td>
。${nbsp}
改行しないスペースを挿入するために使用できる変数も含まれています
。
XPathは、私たちのように空白を正規化しないことに注意してください。XPathのように記述する必要
//div[text()="hello world"]
があるが、リンクのHTMLが本当に " hello world
"である場合は、実際の "
"をSeleneseテストケースに挿入して、次のように一致させる必要があります
//div[text()="hello${nbsp}world"]
。