簡體   English   中英

在 Selenium 測試中使用 XPath 按文本獲取 WebElement

[英]Getting WebElement by Text using XPath in Selenium test

我想使用 XPath 查找基於文本的任何 WebElement。

我有興趣找到的 WebElement,

我感興趣的 WebElement

它的 HTML,

它的 CSS

基本上,我試圖通過 Text 檢索的 WebElement 包含一個輸入元素。

我目前使用,

driver.findElement(By.xpath("//*[normalize-space(text()) = 'Own Hotel']"));

它沒有找到上面的 WebElement,但它通常可以檢索所有其他 Web 元素。

甚至,

By.xpath("//*[contains(text(),'Own Hotel')]")

沒有給我任何結果。 雖然我對精確的文本匹配感興趣。

我正在尋找一種方法來通過 web 元素中存在的元素的文本無關緊要來查找 web 元素。 如果文本匹配,則應返回 WebElement。

謝謝!

似乎文本被包裹在標簽內而不是輸入。 嘗試這個

driver.findElement(By.xpath(".//label[text()[normalize-space() = 'Own Hotel']]"));

有關於這個XPath模式很好的解釋在這里

在下面的 HTML 中:

HTML

<input>節點中的innerText Own Hotel在開頭和結尾都包含許多空白字符。 由於存在這些前導和尾隨空白字符,您不能將位置路徑text()用作:

text()選擇上下文節點的所有文本節點子節點


作為替代方案,您需要使用字符串函數string normalize-space(string?) ,如下所示:

driver.findElement(By.xpath("//*[normalize-space()='Own Hotel']"));

但是,最好讓您的搜索更加細化,添加tagName並最好添加一個 unque 屬性,如下所示:

  • 使用tagNamenormalize-space()

     driver.findElement(By.xpath("//input[normalize-space()='Own Hotel']"));
  • 使用tagNamenormalize-space()

     driver.findElement(By.xpath("//input[@name='ownHotel' and normalize-space()='Own Hotel']"));

參考

您可以在以下位置使用normalize-space()找到一些相關討論:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM