水豚在指定断言的“范围内”
Capybara ingore `within` scope at specify assertion
假设我正在使用 Capybara 和 Minitest 测试一个表单,该表单有一个文本输入,它使用 bootstrap-datepicker,我想取消范围(如 ActiveRecord)仅在('form')范围内在 assert_selector '.datepicker-dropdown', count: 1
,因为 .datepicker-dropdown
附加到正文而不是表单
within "form" do
# other tests...
find("input.date-picker").click
assert_selector '.datepicker-dropdown', count: 1
# failed because .datepicker-dropdown is appended to body
end
虽然 bootstrap-datepicker 有一个选项 container 来指定在何处附加 datepicker-dropdown 小部件,但不适合这种情况。
有两种方法可以转义within
的范围。第一种是使用 XPath 并通过故意破坏范围
来利用 Xpath 陷阱 (https://github.com/teamcapybara/capybara#beware-the-xpath--trap)
assert_xpath '//*', class: 'datepicker-dropdown', count: 1
第二种(可能更清晰)方法是使用 page.document
方法转义当前范围
assert_selector page.document, '.datepicker-dropdown', count: 1
假设我正在使用 Capybara 和 Minitest 测试一个表单,该表单有一个文本输入,它使用 bootstrap-datepicker,我想取消范围(如 ActiveRecord)仅在('form')范围内在 assert_selector '.datepicker-dropdown', count: 1
,因为 .datepicker-dropdown
附加到正文而不是表单
within "form" do
# other tests...
find("input.date-picker").click
assert_selector '.datepicker-dropdown', count: 1
# failed because .datepicker-dropdown is appended to body
end
虽然 bootstrap-datepicker 有一个选项 container 来指定在何处附加 datepicker-dropdown 小部件,但不适合这种情况。
有两种方法可以转义within
的范围。第一种是使用 XPath 并通过故意破坏范围
assert_xpath '//*', class: 'datepicker-dropdown', count: 1
第二种(可能更清晰)方法是使用 page.document
方法转义当前范围
assert_selector page.document, '.datepicker-dropdown', count: 1