Selenium Capybara中CSS元素的等待函数
水豚有等待和非等待功能。我正在尽可能多地使用第一个 有没有一种方法可以使用Selenium Capybara中CSS元素的等待函数,selenium,selenium-webdriver,capybara,selenium-chromedriver,capybara-webkit,Selenium,Selenium Webdriver,Capybara,Selenium Chromedriver,Capybara Webkit,水豚有等待和非等待功能。我正在尽可能多地使用第一个 有没有一种方法可以使用find(或它的一个衍生物)来查找异步显示的CSS元素? 不幸的是,函数page.has\css?是一个非等待函数。您声称page.has\css?是一个非等待函数是不正确的page.has\u css?将等待至Capybara.default\u max\u wait\u time秒,以便元素出现在页面上,并根据该时间内元素是否在页面上返回true或false。因此,给定Capybara.default\u max\u
find
(或它的一个衍生物)来查找异步显示的CSS元素?
不幸的是,函数
page.has\css?
是一个非等待函数。您声称page.has\css?
是一个非等待函数是不正确的page.has\u css?
将等待至Capybara.default\u max\u wait\u time
秒,以便元素出现在页面上,并根据该时间内元素是否在页面上返回true
或false
。因此,给定Capybara.default\u max\u wait\u 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秒内不可见,它将打印“不在页面上”。如果您想让它在特定通话中等待更长时间,您可以通过传递:wait
选项来覆盖默认\u max\u wait\u 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
它将等待元素如前所述出现,但如果元素未出现,则引发异常而不是返回false
如果需要实际元素,可以使用find
,它也会等待。所以
el = page.find(:css, 'div#my_div') # :css is the default and can usually be omitted
将等待元素出现,并在找到元素时返回该元素。如果在default\u max\u wait\u time
秒内未找到该元素,它将引发异常
注意:基本上,唯一的非等待方法是
all
和first
,如果您传入任何计数选项(:count
,:minimum
,:maximum
,:between
),甚至可以让这些方法等待,尽管从它们返回的元素仍然是不可重新加载的,因此如果用于作用域等,则可能会产生进一步的行为影响。即使是单击链接
、单击按钮
等方法也将等待,因为它们被实现为查找(…)。单击
,etc方法find
已经在等待元素被找到。因为测试不应该包含任何逻辑,所以应该使用page.assert_选择器('#foo',:count=>1)
来等待元素,或者page.assert_选择器('#foo',:count=>0)
来等待任何元素。@FlorentB<代码>页面。assert#u选择器('#foo',:count=>0)通常会写入页面。assert#u no_选择器('#foo')
,它还可以处理“确保没有3个匹配元素”-页面。assert#no#u选择器('#foo',count 3)