[解決済み] XPath:ドットとtext()の違い
質問
ドットの使い方について質問です。
text()
で
XPath
. 例えば、次のように
find_element
の行は同じ要素を返します。
driver.get('http://stackoverflow.com/')
driver.find_element_by_xpath('//a[text()="Ask Question"]')
driver.find_element_by_xpath('//a[.="Ask Question"]')
では、何が違うのでしょうか?を使うことの利点と欠点は何でしょうか?
.
と
text()
?
解決方法は?
との間に違いがあります。
.
と
text()
しかし、この違いは、入力文書によって表面化しないかもしれません。
入力文書が次のようなものだったとしたら(XPath式から想像できる最も単純な文書)。
例1
<html>
<a>Ask Question</a>
</html>
次に
//a[text()="Ask Question"]
と
//a[.="Ask Question"]
は、確かに全く同じ結果を返します。しかし、次のような別の入力文書があるとしよう。
例2
<html>
<a>Ask Question<other/>
</a>
</html>
ここで
a
要素もまた、子要素
other
は、"Ask Question"の直後に続いています。この2つ目の入力文書があるとします。
//a[text()="Ask Question"]
は依然として
a
要素で、一方
//a[.="Ask Question"]
は何も返しません!
これは、2つの述語の意味(すべての間の
[
と
]
)が異なる。
[text()="Ask Question"]
実際の意味は、要素のテキストノードのいずれかが正確にテキスト "質問をする" を含んでいる場合に真を返すというものです。一方
[.="Ask Question"]
の意味は、「もし
文字列の値
と同じです。
XPath モデルでは、XML 要素内のテキストを分割して、いくつかの
テキストノード
のように他の要素がテキストを妨害する場合、そのテキストは
例2
上記の通りです。そこでは
other
要素は "Ask Question" と改行文字の間にあり、これもテキストコンテンツとしてカウントされます。
さらにわかりやすくするために、入力文書として考えてみましょう。
例3
<a>Ask Question<other/>more text</a>
ここで
a
要素には、実際には
に
テキストノード、"Ask Question" と "more text" は、どちらも
a
. これをテストするには、次のように実行します。
//a/text()
で区切られた個々の結果)を返します。
----
):
Ask Question
-----------------------
more text
では、そのようなシナリオの場合
text()
は個々のノードのセットを返しますが
.
は、すべてのテキストノードの文字列連結として評価されます。繰り返しになりますが、この主張をパス式でテストすることができます。
//a[.='Ask Questionmore text']
を返すと、正常に
a
要素を使用します。
最後に、XPath関数の中には、1つの文字列しか入力として受け取ることができないものがあることに留意してください。LarsH がコメントで指摘しているように、もしそのような XPath 関数 (例.
contains()
が一連のノードを受け取った場合、そのノードは
最初の
ノードを生成し,残りは黙って無視する。
関連
-
[解決済み] WebDriver や Protractor でタブを閉じる方法はありますか?
-
[解決済み] org.openqa.selenium.remote.UnreachableBrowserException: リモートブラウザとの通信にエラーが発生しました。ChromeDriverとSeleniumで死亡している可能性があります。
-
selenium でページ (または特定の要素) の読み込みが完了するのを待つ
-
selenium chromeドライバとIEドライバのFAQ (1)
-
selenium.webdriver.chrome.options add_argument 共通パラメータ
-
[解決済み] Seleniumで要素をスクロールして表示する
-
[解決済み] XPath:ドットとtext()の違い
-
[解決済み] XPath contains(text(),'some string') は、複数の Text サブノードを持つノードで使用すると動作しません。
-
[解決済み】XPath:その値に基づいて要素を選択するには?
-
[解決済み] WebDriverで特定の条件下で待機しているときにWebページをリフレッシュする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] WebDriver や Protractor でタブを閉じる方法はありますか?
-
selenium chromeドライバとIEドライバのFAQ (1)
-
ドライバの実行ファイルのパスは、webdriver.gecko.driver システムプロパティで設定する必要があります。
-
クロームブラウザを設定するためのselenium+pythonオプション
-
[解決済み] XPath:ドットとtext()の違い
-
[解決済み] XPathのprioring-siblingを正しく使用する方法
-
[解決済み] Selenium WebDriverでスクリーンショットを撮るにはどうしたらいいですか?
-
Selenium】Raspbian+Selenium+Firefoxのセットです。
-
[解決済み] Selenium WebDriverのテストケースをChromeで実行する方法
-
[解決済み] Seleniumは既存のブラウザセッションと対話することができますか?