gpt4 book ai didi

javascript - cucumber + ruby + capybara + Selenium : How to make the 'visit' method wait for dynamic content

转载 作者:行者123 更新时间:2023-12-03 05:15:02 25 4
gpt4 key购买 nike

这是一个已经困扰了数周的问题,网上找到的所有解决方案似乎都不起作用......即。等待ajax等...

这里是 gems 的版本:

  • capybara (2.10.1、2.7.1)
  • selenium-webdriver(3.0.1、3.0.0)
  • rspec (3.5.0)

运行 ruby 2.2.5ruby 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”方法遇到的问题是,一旦它访问页面,它就会认为所有内容都已加载并卡住浏览器,并且它永远不会让服务被调用来动态更新内容。我尝试了以下解决方案但没有成功:

  1. capybara .default_max_wait_time = 5
  2. Capybara::Driver::Selenium.new(app, :browser => browser.to_sym, :resynchronize => true)
  3. 在访问方法后添加 sleep 5
  4. 等待多个网站的ajax解决方案等...
  5. 添加在钩子(Hook)之后等等...

我完全不知道为什么“访问”不能等待,或者至少为我确信很常见的问题提供一个简单的解决方案。我知道 capybara 的等待方法和不等待的方法,例如“访问”,但问题是;

  1. 没有内容从隐藏变为显示
  2. 也没有用户交互,只是内容在更新。

也不确定这是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com