Rails + Minitest + Capybara:如何 assert_select 使用 span id
Rails + Minitest + Capybara: how to assert_select with span id
在我看来我有:
<span class = "info">
<span id="<%= account.id %>" data-account_id="<%= account.id %>" data-activated="<%= account.starts_at? %>">
<%= t(".account_activated") %>
</span>
</span>
如果里面显示 "account has been activated" 文本,最好的测试方法是什么(使用水豚进行系统测试)?
我试过了:
assert_selector "span##{acount.id}", text: "account has been activated"
但得到 Selenium::WebDriver::Error::InvalidSelectorError:无效的选择器:指定了无效或非法的选择器
我已经解决了这个问题。
这是因为 ID 不应以数字开头(参见 here)
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
followed by any number of letters, digits ([0-9]), hyphens ("-"),
underscores ("_"), colons (":"), and periods (".").
查看代码修改如下:
<span class = "info">
<span id="**account_**<%= account.id %>" data-account_id="<%= account.id %>" data-activated="<%= account.starts_at? %>">
<%= t(".account_activated") %>
</span>
</span>
和
assert_selector "#account_#{account.id}", text: "account has been activated"
在 HTML5 中,定义已更改为允许 ID 以数字开头,但 CSS 要求正确转义前导数字(# 234
将匹配 ID“1234” ).因此,如果您需要通过 CSS 将元素与可能以数字开头的 id 匹配,最好使用 id
选项(所有 Capybara 选择器都支持)并让 Capybara 将其合并到CSS
assert_selector "span", id: account.id, text: "account has been activated"
这将正确转义并将其应用于 CSS。如果你只想指定 id 而不是元素类型(因为 id 在页面上应该是唯一的)你可以使用 :id 选择器类型(而不是默认的 CSS 选择器类型)
assert_selector :id, account.id, text: "account has been activated"
在我看来我有:
<span class = "info">
<span id="<%= account.id %>" data-account_id="<%= account.id %>" data-activated="<%= account.starts_at? %>">
<%= t(".account_activated") %>
</span>
</span>
如果里面显示 "account has been activated" 文本,最好的测试方法是什么(使用水豚进行系统测试)?
我试过了:
assert_selector "span##{acount.id}", text: "account has been activated"
但得到 Selenium::WebDriver::Error::InvalidSelectorError:无效的选择器:指定了无效或非法的选择器
我已经解决了这个问题。
这是因为 ID 不应以数字开头(参见 here)
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
查看代码修改如下:
<span class = "info">
<span id="**account_**<%= account.id %>" data-account_id="<%= account.id %>" data-activated="<%= account.starts_at? %>">
<%= t(".account_activated") %>
</span>
</span>
和
assert_selector "#account_#{account.id}", text: "account has been activated"
在 HTML5 中,定义已更改为允许 ID 以数字开头,但 CSS 要求正确转义前导数字(# 234
将匹配 ID“1234” ).因此,如果您需要通过 CSS 将元素与可能以数字开头的 id 匹配,最好使用 id
选项(所有 Capybara 选择器都支持)并让 Capybara 将其合并到CSS
assert_selector "span", id: account.id, text: "account has been activated"
这将正确转义并将其应用于 CSS。如果你只想指定 id 而不是元素类型(因为 id 在页面上应该是唯一的)你可以使用 :id 选择器类型(而不是默认的 CSS 选择器类型)
assert_selector :id, account.id, text: "account has been activated"