Capybara / Ruby - 尝试从不可见元素中获取文本,然后将其转换为字符串

Capybara / Ruby - Trying to get a text from an invisible element and then convert it to string

我正在尝试从属于不可见元素的 CSS 选择器中获取特定文本值。之后我想将文本(来自元素)转换为 String 以便稍后使用 slice 方法。

我想出了如何找到不可见元素,但是我没有找到获取文本然后将其转换为字符串的方法。

我要获取的文字在下面的p中(本例中是3个cartões)

<p class="list-header-num-cards hide js-num-cards">3 cartões</p>

--

CSS 选择器是 <#board > div:nth-child(1) > div.list.js-list-content > div.list-header.js-list-header.u-clearfix.is-menu-shown > p

我已经尝试过如下命令:

var = find('#board > div:nth-child(1) > div.list.js-list-content > div.list-header.js-list-header.u-clearfix.is-menu-shown > p', visible: false).value

var = find('#board > div:nth-child(1) > div.list.js-list-content > div.list-header.js-list-header.u-clearfix.is-menu-shown > p', visible: false).text

但是 var 变量没有收到文本值,测试通过了。

我尝试使用 puts var 输出什么都没有

默认情况下,text 方法仅 returns 可见文本,因为在测试 app/site 时,您实际上应该只担心用户可以看到什么。要获得不可见的文本,您可以将 :all 传递给文本方法

find('#board > div:nth-child(1) > div.list.js-list-content > div.list-header.js-list-header.u-clearfix.is-menu-shown > p', visible: false).text(:all)

https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Node/Element#text-instance_method

此外,请注意,使用 CSS 选择器(如您所愿)会导致非常脆弱的测试。选择器的所有 类 和元素类型部分是否真的有必要,或者像 #board > :nth-child(1) .list-header p 这样更简单的东西也可以工作吗?即使这可能比您需要的更具体,但在没有看到实际情况的情况下 HTML 很难说什么更好。