XPathを使用してテキストを含む要素を見つけようとしていますが、機能しません。
WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]"));
「contains」を含む最後のビットを削除すると、span要素が見つかりますが、テキストの内容に基づいて選択する必要があります。切り捨てられた文字列も含まれている可能性があるため、「一部のテキスト」にも完全には一致しません。
誰もが問題を見ていますか?
問題はここにあると思います:
_[contains(text()='Some text')]
_
これを分解するには、
[]
_は、そのノードセット内の個々のノード(ケースの各スパンノード)で動作する条件です。動作する個々のノードのいずれかが括弧内の条件に一致する場合に一致します。text()
は、コンテキストノードの子であるすべてのテキストノードに一致するセレクターです。ノードセットを返します。contains
は、文字列を操作する関数です。ノードセットが渡された場合、ノードセットは ドキュメントセットの最初にあるノードセット内のノードの文字列値を返すことで文字列に変換されます です。これを変更してみてください
[text()[contains(.,'Some text')]]
外側の_[]
_は、そのノードセットの個々のノードで動作する条件ですtext()
は、コンテキストノードの子であるすべてのテキストノードに一致するセレクターです。ノードを返しますセット。
内側の_[]
_は、そのノードセットの各ノードで動作する条件です。
contains
は、文字列を操作する関数です。ここでは、個々のテキストノード(_.
_)が渡されます。
これを使って
//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text(),'Some text')]
OR
//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(.,'Some text')]
@FindBy(xpath = "//button[@class='btn btn-primary' and contains(text(), 'Submit')]") private WebElementFacade submitButton;
public void clickOnSubmitButton() {
submitButton.click();
}