Javascript 黄瓜+;Ruby+;水豚+;硒:如何制作';访问';方法等待动态内容
这是一个困扰了数周的问题,在网上找到的所有解决方案似乎都不起作用。。。例如,等待ajax等 以下是gems的版本:Javascript 黄瓜+;Ruby+;水豚+;硒:如何制作';访问';方法等待动态内容,javascript,ruby,selenium,cucumber,capybara,Javascript,Ruby,Selenium,Cucumber,Capybara,这是一个困扰了数周的问题,在网上找到的所有解决方案似乎都不起作用。。。例如,等待ajax等 以下是gems的版本: 水豚(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] 在环境rb中 Capybara.register_driver :selenium do | app | browser = (ENV
- 水豚(2.10.1、2.7.1)
- selenium webdriver(3.0.1、3.0.0)
- rspec(3.5.0)
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
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
这是我的动态页面。功能
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
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
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>
1-占位符文本
调用外部服务(提供Json数据)后,相同的span类将刷新/更新为以下内容:
2- <span class="text-replacer-done">Correct Data</span>
2-正确的数据
我对capybara+selenium中的“visit”方法存在的问题是,它一访问页面,就会认为所有内容都已加载并冻结浏览器,而且它从不允许调用服务来动态更新内容。
我尝试了以下解决方案,但没有成功:
Mel还原
等待直到方法(将其添加到spec\u helpers.rb
)
然后:
# time in seconds
wait_until(20) { has_no_css?('.text-replacer-pending') }
expect(page).to have_css(".text-replacer-done")
@maxple和@nattf0dd
只是为了结束我们在这里的问题
从另一个角度看这个问题,,
我们终于发现黄瓜/水豚/根本不是问题:-)
我们遇到的问题在于浏览器Firefox驱动程序(与SSL相关),因为我们在使用Chrome驱动程序运行相同测试时没有问题
我非常感谢各位的答复和建议,并将在今后铭记在心。
再次感谢 水豚不会以任何方式“冻结”浏览器,或阻止它运行任何东西。如果您的内容没有加载,那么这是因为JS或提供数据的服务中存在问题。访问后,在测试中暂停(pry、byebug等),然后查看浏览器窗口中打开的开发人员控制台并检查错误。另外,Capybara已经多年不支持:重新同步选项。除了default\u wait\u time
之外,还可以使用“显式等待”-请看,Capybara显然放弃了执行此操作的任何方法,但您仍然可以在selenium中执行此操作。谢谢您,Thomas。实际上,当我手动运行它时,即不使用cucumber/capybara/selenium时,我可以直观地看到内容得到更新,但在观看cucumber测试运行时,我清楚地看到浏览器保留了占位符内容。我将检查pry以进行调试。谢谢Maxple,我相信我可能需要在env.rb中添加selenium驱动程序说明。我将尝试显式等待,看看是否有效。如果这解决了问题,我会向您报告。@maxple使用“显式等待”只不过是由Capybaras查找器和匹配器自动完成的操作(这就是为什么Capybara放弃了其他方法)@Melie您得到的错误到底是什么?等到这里完全不需要时,才使用Capybara提供的功能<代码>预期(第页)。没有css('.text replacer pending',wait:20)
或expect(第页)。没有css('.text replacer pending',wait:20)