这个问题一直困扰着几个星期,所有在线发现的解决方案似乎都不起作用...即。等ajax等...
这里是宝石的版本:
运行ruby 2.2.5 ruby 2.2.5p319(2016-04-26修订版54774)[x64-mingw32]
env.rb中的
Capybara.register_driver :selenium do | app |
browser = (ENV['browser'] || 'firefox').to_sym
Capybara::Driver::Selenium.new(app, :browser => browser.to_sym, :resynchronize => true)
Capybara.default_max_wait_time = 5
end
这是我的dynamicpage.feature
Given I visit page X
Then placeholder text appears
And the placeholder text is replaced by the content provided by the json service
和step.rb
When(/^I visit page X$/) do
visit('mysite.com/productx/')
end
When(/^placeholder text appears$/) do
expect(page).to have_css(".text-replacer-pending")
end
Then(/^the placeholder text is replaced by the content provided by the json service$/) do
expect(page).to have_css(".text-replacer-done")
end
有问题的网页,我无法在此处添加,因为它不可公开访问,在页面加载时包含以下内容:
1- <span class="text-replacer-pending">Placeholder Text</span>
在调用外部服务(提供Json数据)之后,相同的span类被刷新/更新为以下内容;
2- <span class="text-replacer-done">Correct Data</span>
我在capybara + selenium中使用“visit”方法的问题是,只要它访问页面,就会认为所有内容都已加载并冻结浏览器,并且它永远不会调用服务来动态更新内容。 我尝试了以下解决方案但没有成功:
我完全失去了为什么“访问”不能等待或至少提供一个简单的解决方案,我相信这是非常常见的问题。 我知道等待的水豚方法和那些不等待的方法,例如“访问”,但问题是;
也不确定这是水豚问题还是硒问题,或两者兼而有之。
无论如何都有任何解决方案的见解?我对红宝石和黄瓜相当新,所以特别是什么代码在什么文件/文件夹中会很受欢迎。
梅尔
答案 0 :(得分:1)
恢复wait_until
方法(将其添加到spec_helpers.rb
)
def wait_until(timeout = DEFAULT_WAIT_TIME)
Timeout.timeout(timeout) do
sleep(0.1) until value = yield
value
end
end
然后:
# time in seconds
wait_until(20) { has_no_css?('.text-replacer-pending') }
expect(page).to have_css(".text-replacer-done")
答案 1 :(得分:0)
@maxple和@ nattf0dd 只是为了关闭我们这个问题的循环......
从不同的角度看待这个问题后, 我们终于发现Cucumber / Capybara /根本不是问题: - )
我们遇到的问题在于浏览器Firefox驱动程序(与SSL相关),因为在使用Chrome驱动程序运行相同测试时我们没有任何问题。
我非常感谢回复和建议,并将在未来考虑到这些。 再次感谢!