这是一个已经困扰了数周的问题,网上找到的所有解决方案似乎都不起作用......即。等待ajax等...
这里是 gems 的版本:
- capybara (2.10.1、2.7.1)
- selenium-webdriver(3.0.1、3.0.0)
- rspec (3.5.0)
运行 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
这是我的动态页面.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”方法遇到的问题是,一旦它访问页面,它就会认为所有内容都已加载并卡住浏览器,并且它永远不会让服务被调用来动态更新内容。 我尝试了以下解决方案但没有成功:
- capybara .default_max_wait_time = 5
- Capybara::Driver::Selenium.new(app, :browser => browser.to_sym, :resynchronize => true)
- 在访问方法后添加 sleep 5
- 等待多个网站的ajax解决方案等...
- 添加在钩子(Hook)之后 等等...
我完全不知道为什么“访问”不能等待,或者至少为我确信很常见的问题提供一个简单的解决方案。 我知道 capybara 的等待方法和不等待的方法,例如“访问”,但问题是;
- 没有内容从隐藏变为显示
- 也没有用户交互,只是内容在更新。
也不确定这是 capybara 问题还是 Selenium 问题或两者兼而有之。
对任何解决方案有见解吗?我对 ruby 和 cucumber 相当陌生,所以具体什么代码放在什么文件/文件夹中将非常感激。
梅尔
最佳答案
恢复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")
关于javascript - cucumber + ruby + capybara + Selenium : How to make the 'visit' method wait for dynamic content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41644473/