在使用 Capybara 和 Selenium 时,我似乎在测试使用 jQuery 执行的 javascript 操作时遇到了麻烦。预期的行为是当用户单击链接“添加资源”时动态生成表单。 Capybara 将能够单击该链接,但无法识别新的表单元素(即“资源[名称]”)。
有没有办法为 Capybara 重新加载 DOM,或者这个 gem 中是否有一些我还没有了解的元素?
提前致谢!
==Edit==
目前正在尝试硒的运气:
wait_for_element
method.
==Edit==
当尝试执行以下操作时,我不断收到“nill 类的未定义方法'wait_for_element`”:
@selenium.wait_for_element
看来具体的方法,或者也许wait_for
有一个巨大的选择器访问 DOM 元素,我期望这是正确的操作过程,但现在尝试获取 selenium 会话开始变得非常令人头疼。
我在 RSpec 中使用基于 Webdriver 的 Capybara 驱动程序,我像这样配置和使用它,它肯定会处理 JS 并且不需要重新加载 dom。关键是使用 wait_until 和 AJAX 响应完成时为 true 的条件。
before(:each) do
select_driver(example)
logout
login('databanks')
end
def select_driver(example)
if example.metadata[:js]
Capybara.current_driver = :selenium
else
Capybara.use_default_driver
end
end
it "should let me delete a scenario", :js=>true do
select("Mysite Search", :from=>'scenario_id')
wait_until{ page.has_content?('mysite_searchterms')}
click_on "delete"
wait_until{ !page.has_content?('mysite_searchterms')}
visit '/databanks'
page.should_not have_content('Mysite Search')
end
昨晚我还想出了一个减慢网络驱动程序速度的方法,就像这样,如果你想慢动作地观看内容:
#set a command delay
require 'selenium-webdriver'
module ::Selenium::WebDriver::Remote
class Bridge
def execute(*args)
res = raw_execute(*args)['value']
sleep 0.5
res
end
end
end
正如其他人提到的,如果您等待元素超时,您可以考虑增加此值:
Capybara.default_wait_time = 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)