【问题标题】:How do I get the text of a capybara element including leading whitespace.如何获取包含前导空格的水豚元素的文本。
【发布时间】:2018-06-06 20:01:43
【问题描述】:

我正在尝试编写一个处理空白验证的 rspec/capybara/selenium 规范。基本上我有一个可以填写的表格,一旦保存,信息就会在表格中呈现为一行。我遇到的问题是,一旦我达到某个 td 或 span 并在其上调用 .text,返回的内容就会被去除前导和尾随空格。因此,如果您查看下面的示例,如果我调用find('#one').text,则返回的是'FOOO'。我想要返回的是' FOOO '(即包括前导和尾随空格)。

<tr id="myRow">
    <td id="one">
        <span>  FOOO   </span>
    </td>
    <td id="two">
        <span>  BAR      </span>
    </td>
</tr>

【问题讨论】:

  • 试试这个 xpath //td[@id='one']/span
  • @Rajagopalan 当问题是关于文本内容找不到元素时,您认为更改为 XPath 会有什么不同?
  • 他没有指向要从中提取文本的确切节点。
  • @Rajagopalan 这在这里并不重要,因为如果这有所不同,那么您只会期望返回有更多的空白(td 内的空白)。正如我在回答中提到的那样,问题是浏览器在显示文档时会忽略/折叠 HTML 文档中的大多数正常空白。此外,如果选择确切的元素会产生影响,那么 OP 最好坚持使用 CSS #one span,而不是切换到 XPath。

标签: ruby selenium rspec capybara


【解决方案1】:

浏览器会折叠/忽略前导和尾随空格,因此 Capybara 也会这样做。如果您希望该空格在浏览器中实际可见,则需要在 HTML 中用不间断空格 ( ) 替换空格,然后 Capybara 也会返回它们。

【讨论】:

  • 是吗?你能通过写//span[text()='FOOO']找到上述文本节点之一吗?
  • @Rajagopalan 不,您不能,因为 XPath 应用于文字文档。然而,浏览器处理该文档并应用 HTML 规则来忽略/折叠文档中的大量空白(在浏览器中加载 OPs HTML 并查看前导和尾随空白是否显示 - 提示:它没有)跨度>
  • 如果我在最新版本的 Firefox 中加载,它会折叠空格,但如果我在 Firefox ESR 最新版本中加载,它不会折叠空格。
  • @Rajagopalan 不知道你对你的 FF 52.8.1 ESR 做了什么,因为它的行为就像我的当前版本一样(关于显示期间的空白折叠)。很长一段时间以来,空格的折叠一直是 HTML 规范的一部分,如果在 FF52 中没有正确完成,它将破坏几乎所有网站。
  • 我不知道它对我来说是这样的。它的 Firefox 52.7
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2010-11-23
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多