如何在 rails 中使用 assert_selector 获取占位符值

How to get placeholder value using assert_selector in rails

如何使用 rails 中的 assert_selector 从输入栏中获取占位符值?

<input placeholder="hello world"  value="<%= params[:query] %>" required>

我想检查占位符中是否有 hello

您可以使用 xpath 并验证是否有一个 input 元素的占位符 contains 'hello'

assert_selector(:xpath, './/input[contains(@placeholder,"hello")]')

如果你想准确地检查带有 id

的输入
assert_selector(:xpath, './/input[@id="input_id"][contains(@placeholder,"hello")]')

我不确定是否有检查正则表达式的辅助方法,例如 ~= /.*hello.*/,如果你想这样做,你还有另一个选择

placeholder = find('#input_id')['placeholder'] # or use :xpath
assert_match /.*hello.*/, placeholder

虽然 Lam Phan 的回答确实回答了这个问题,但从 readability/understandability 的角度来看,当 CSS 有您需要的东西时诉诸于编写 XPath 查询通常不是最好的主意。

CSS 有许多属性选择器,通常对测试最有用的是

  • =匹配
  • *=包含
  • ^= 以
  • 开头
  • ~=空格分隔匹配

你可以在https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors

看到完整的集合

在这种情况下,这意味着您可以执行以下任一操作

assert_selector('input[placeholder*="hello"]') # contains 'hello'
assert_selector('input[placeholder~="hello"]') # contains the word 'hello'
assert_selector('input[placeholder^="hello"]') # starts with 'hello'

另一种选择是利用 Capybara :field 选择器有一个 placeholder 过滤器 - https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selector.rb#L34 - 它采用正则表达式 - 所以你可以做

assert_field(placeholder: /hello/)

相同
assert_selector(:field, placeholder: /hello/)