【问题标题】:Selenium Xpath using value from gettext() method not workingSelenium Xpath 使用 gettext() 方法中的值不起作用
【发布时间】:2018-10-16 13:13:14
【问题描述】:

我的应用程序中有以下 html 元素。

  <td height="25">
&nbsp;&nbsp;&nbsp; 
 <i>text1</i>
text2
  </td>

我的目标是为我的测试脚本获取 td 元素。为此,我使用以下元素的 getText 方法获取了 td 标记内的文本。

xpath = "//td/i[contains(text(),'text1')]/parent::td"

该方法返回以下文本(以空格开头)

      text1 text2

所以我将该文本复制到下面的 xpath 中以获取 td 元素。

xpath = "//td[contains(text(),'text1 text2')]"

但是我得到了上述元素的 NosuchElement 异常。这怎么可能?

注意:我不能在我的脚本中使用第一个 xpath,因为有几个像这样的 td 元素,它们有一个常见的 i 标记文本(文本 1)但不同的 td 标记文本(text2,text3...)

【问题讨论】:

  • 试试"//td[contains(normalize-space(),'text1 text2')]"
  • @andersson 这工作谢谢!虽然我不同意这是一个重复的问题,但问题完全不同,并且“规范化空间”方法仅在 cmets 部分中提及。
  • 使用normalize-space() 是解决此问题的方法。了解.text() 之间的区别将帮助您完全避免这个问题。

标签: selenium-webdriver xpath


【解决方案1】:

Selenium 捕获 WebElement,它保存元素和所有子元素文本。在这种情况下,&lt;td&gt; 元素文本是&amp;nbsp;&amp;nbsp;&amp;nbsp;text1text2 的组合,因此当您使用第一个表达式获取文本时,您将得到text1 text2。但是,DOM 中没有文本 text1 text2 的元素,因为 text1 belomgs 到 &lt;i&gt; 元素。试试

//i[contains(text(),'text1')]/parent::td[contains(text(),'text2')]

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多