[解決済み] XPATHを使用して、 を含むテキストを検索する。
質問
私は XPather ブラウザ を使って、HTMLページ上でXPATH式をチェックしています。
私の最終的な目標は、ユーザーインターフェイスのテストにSeleniumでこれらの式を使用することです。
このような内容のHTMLファイルを入手しました。
<tr> <td>abc</td> <td> </td> </tr>
文字列"を含むテキストを持つノードを選択したい。
という文字列を含むテキストを選択したいです。
"abc"のような通常の文字列では、問題はありません。 私は以下のようなXPATHを使用しています。
//td[text()="abc"]
.
のようなXPATHで試してみると、以下のようになります。
//td[text()=" "]
のようなXPATHで試すと、何も返ってきません。 というテキストは特別なルールがあるのでしょうか?
&
というテキストには特別なルールがありますか?
どのように解決するのですか?
どうやら
OpenQA
は、Seleniumの背後にいる人々が、すでにこの問題に対処しているようです。 彼らは、ホワイトスペースを明示的にマッチさせるために、いくつかの変数を定義しました。 私の場合、次のようなXPATHを使用する必要があります。
//td[text()="${nbsp}"]
.
この問題に関する OpenQA のテキストをここに転載します (見つかったのは はこちら ):
HTML は要素内の空白を自動的に正規化します。 要素内の空白を正規化し、先頭/末尾の空白を無視し を無視し、余分なスペースやタブ、改行を 余分なスペース、タブ、改行などは一つのスペースに変換されます。 を一つのスペースに変換します。Selenium がテキストを読み取るとき を読み出すとき、この挙動を再現しようとします。 この挙動を再現しようとします。 でのタブや改行をすべて無視することができます。 を無視してアサーションを行うことができます。 に基づいてアサーションを行うことができます。 レンダリングしたときにブラウザ上でテキストがどのように見えるかに基づいてアサーションを行うことができます。これを行うには、すべての 可視でない空白文字 (例えば を含む) を置き換えることで行います。
を含む)を を1つの空白に置き換えます。目に見えるすべての改行 (<br>
,<p>
そして<pre>
といったフォーマットされた の改行)は保存されるべきです。に同じ正規化ロジックを使用します。 HTML Selenese テストケースのテキスト テーブルのテキストにも同じ正規化ロジックを使います。これには の利点があります。まず、ページの HTML ソースを見る必要がありません。 ページの HTML ソースを見る必要がありません。 アサーションがどのようなものであるべきかを判断するために であることです。
記号はエンドユーザーには見えません。 エンドユーザーには見えません。 記号はエンドユーザーには見えないので、Selenese のテストを書くときに気にする必要はありません。 記号はエンドユーザーには見えないので、 Selenese のテストを書くときに気にする必要はありません。(あなたは をつける必要はありません。
というマーカーをテストケースに入れる必要はありません。 を含むフィールドに assertText するには "
"を含むフィールドに assertText するようにします)。また、余計な を追加することもできます。<td>
タグに余計な改行や空白を入れてもかまいません。 テストケースの正規化ロジック に同じ正規化ロジックを使用しているので アサーションと抽出されたテキストが が正確に一致することを保証します。これは、次のような場合にちょっとした問題を引き起こします。 このため、まれに 余分な空白を挿入したい場合 を挿入したい場合、ちょっとした問題が発生します。たとえば、次のような場合です。 フィールドにテキストを入力する必要があります。 のようなフィールドにテキストを入力する必要があります。
foo
というように入力する必要があります。しかし、単に と書くと<td>foo </td>
と書くだけなら を書くだけであれば を1つのスペースに置き換えます。この問題には簡単な回避策があります。 Seleneseで変数を定義しています。
${space}
という変数を定義し、その値を という変数を定義しました。あなたは${space}
を使って 自動的に切り取られないスペースを挿入するには を挿入することができます。<td>foo${space}${space}${space}</td>
. また、変数${nbsp}
という変数があり、これを使うと という変数があります。XPathは ではなく を正規化しません。 を正規化しません。もし のようなXPathを書く必要がある場合
//div[text()="hello world"]
のような XPath を書く必要があっても、リンクの リンクの HTML は本当に である。hello world
である場合、次のようにします。 を挿入してください。
を挿入する必要があります。 を挿入する必要があります。 このように//div[text()="hello${nbsp}world"]
.
関連
-
[解決済み] Vimで大文字小文字を区別しない検索をする方法
-
[解決済み] XML文書でエスケープする必要がある文字は何ですか?
-
[解決済み] chromedriverでSeleniumを使用していることをWebサイトで検出することは可能ですか?
-
[解決済み] XMLの要素とノードはどう違うのですか?
-
[解決済み] XPathによる属性の取得
-
[解決済み】XPathで属性ノードの値を抽出する
-
[解決済み] XMLコマンドライン処理のためのGrepとSedの等価版
-
[解決済み] IIS7:HTTP->HTTPS クリーンアップ
-
[解決済み] xmlのCDATAエンドトークンをエスケープする方法はありますか?
-
[解決済み] 有効なXMLファイルにはXML宣言が必要ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] cURL コマンドラインを使用して XML ファイルを POST
-
[解決済み] XMLの要素とノードはどう違うのですか?
-
[解決済み] Linearレイアウトでボタンを中央に配置する
-
[解決済み] T-SQLでXML文字列の属性にある二重引用符をエスケープするにはどうすればよいですか?
-
[解決済み] XPath: select text node
-
[解決済み] XML SchemaとDTDの違いは何ですか?
-
[解決済み] XML インスタンスドキュメントから XSD スキーマを生成するためのツールはありますか?[クローズド]。
-
[解決済み] nuget 'packages' 要素が宣言されていない警告
-
[解決済み] XMLサイトマップのContent-Typeはどのような値ですか?
-
[解決済み] Eclipse で XML の検証を無効にする