Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Capybara中CSS元素的等待函数_Selenium_Selenium Webdriver_Capybara_Selenium Chromedriver_Capybara Webkit - Fatal编程技术网

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)