Javascript 黄瓜+;Ruby+;水豚+;硒:如何制作';访问';方法等待动态内容

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

这是一个困扰了数周的问题,在网上找到的所有解决方案似乎都不起作用。。。例如,等待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['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”方法存在的问题是,它一访问页面,就会认为所有内容都已加载并冻结浏览器,而且它从不允许调用服务来动态更新内容。 我尝试了以下解决方案,但没有成功:

  • Capybara.default\u max\u wait\u time=5
  • Capybara::Driver::Selenium.new(应用程序:浏览器=>browser.to_sym,:重新同步=>true)
  • 在访问方法之后添加睡眠5
  • 等待来自多个网站的ajax解决方案,等等
  • 添加后钩子 等等
  • 我完全不知道为什么“访问”不能等待,或者至少提供一个简单的解决方案来解决一个我确信是很常见的问题。 我知道水豚的等待方法和那些不等待的方法,比如“拜访”,但问题是

  • 没有从隐藏到显示的内容
  • 也没有用户交互,只是内容正在更新
  • 也不确定这是水豚问题还是硒问题,或者两者兼而有之

    无论如何,你对任何解决方案都有见解吗?我对ruby和cucumber还比较陌生,所以特别是什么代码放在什么文件/文件夹中,我将不胜感激


    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)