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 很难说什么更好。
我正在尝试从属于不可见元素的 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 很难说什么更好。