Capybara 中 CSS 元素的等待函数
Waiting function for CSS element in Capybara
水豚有等待和非等待功能。我正在尝试尽可能多地使用第一个。
有没有一种方法可以使用 find
(或其衍生物之一)来查找异步出现的 CSS 元素?
不幸的是,函数 page.has_css?
是一个非等待函数。
您声称 page.has_css?
是非等待函数是不正确的。 page.has_css?
将最多等待 Capybara.default_max_wait_time
秒让元素出现在页面上,return true
或 false
取决于元素是否在页面上那段时间内的页面。因此,给定 Capybara.default_max_wait_time = 5
if page.has_css?("div#my_div")
puts "on page"
else
puts "not on page"
end
最多等待 5 秒。只要 ID 为 "my_div" 的 div 在页面上可见,它就会打印 "on page"。如果匹配的 div 在 5 秒内不可见,它将打印 "not on page"。如果您希望它等待特定呼叫的时间更长,您可以通过传递 :wait
选项
来覆盖 default_max_wait_time
if page.has_css?("div#my_div", wait: 10) # will wait up to 10 seconds
...
如果您不希望得到布尔值响应而希望确保元素存在,您可以执行以下任一操作
page.assert_selector(:css, 'div#my_div') # :css is the default so can usually be omitted
page.assert_css('div#my_div') # minitest
expect(page).to have_css('div#my_div') # RSpec
它将像以前一样等待元素出现,但如果元素没有出现
,则引发异常而不是 returning false
如果您需要实际元素,您可以使用 find
,这也会等待。所以
el = page.find(:css, 'div#my_div') # :css is the default and can usually be omitted
将等待元素出现并 return 找到元素。如果在 default_max_wait_time
秒内未找到该元素,它将引发异常。
注意:基本上,唯一的非等待方法是 all
和 first
如果您传入任何计数选项,甚至可以让这些方法等待(:count
, :minimum
, :maximum
, :between
), 尽管从它们 return 中提取的元素仍然是不可重新加载的,因此如果用于范围界定等,可能会产生进一步的行为影响. 即使像 click_link
、click_button
等方法也会等待,因为它们被实现为 find(...).click
、等
水豚有等待和非等待功能。我正在尝试尽可能多地使用第一个。
有没有一种方法可以使用 find
(或其衍生物之一)来查找异步出现的 CSS 元素?
不幸的是,函数 page.has_css?
是一个非等待函数。
您声称 page.has_css?
是非等待函数是不正确的。 page.has_css?
将最多等待 Capybara.default_max_wait_time
秒让元素出现在页面上,return true
或 false
取决于元素是否在页面上那段时间内的页面。因此,给定 Capybara.default_max_wait_time = 5
if page.has_css?("div#my_div")
puts "on page"
else
puts "not on page"
end
最多等待 5 秒。只要 ID 为 "my_div" 的 div 在页面上可见,它就会打印 "on page"。如果匹配的 div 在 5 秒内不可见,它将打印 "not on page"。如果您希望它等待特定呼叫的时间更长,您可以通过传递 :wait
选项
default_max_wait_time
if page.has_css?("div#my_div", wait: 10) # will wait up to 10 seconds
...
如果您不希望得到布尔值响应而希望确保元素存在,您可以执行以下任一操作
page.assert_selector(:css, 'div#my_div') # :css is the default so can usually be omitted
page.assert_css('div#my_div') # minitest
expect(page).to have_css('div#my_div') # RSpec
它将像以前一样等待元素出现,但如果元素没有出现
,则引发异常而不是 returningfalse
如果您需要实际元素,您可以使用 find
,这也会等待。所以
el = page.find(:css, 'div#my_div') # :css is the default and can usually be omitted
将等待元素出现并 return 找到元素。如果在 default_max_wait_time
秒内未找到该元素,它将引发异常。
注意:基本上,唯一的非等待方法是 all
和 first
如果您传入任何计数选项,甚至可以让这些方法等待(:count
, :minimum
, :maximum
, :between
), 尽管从它们 return 中提取的元素仍然是不可重新加载的,因此如果用于范围界定等,可能会产生进一步的行为影响. 即使像 click_link
、click_button
等方法也会等待,因为它们被实现为 find(...).click
、等