首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Capybara升级Capybara:查询

Capybara升级Capybara:查询
EN

Stack Overflow用户
提问于 2019-04-03 10:06:47
回答 1查看 292关注 0票数 0

我有一个古老的项目,与Capybara版本2.7.1。一个文件有以下代码

代码语言:javascript
运行
复制
module Capybara
  module Node
    module Finders
      def all(*args)
        using_wait_time 1 do
          xpath = args.find { |a| a.is_a? String }
          has_selector? xpath
          query = Capybara::Query::Query.new(*args)
          synchronize(1) do
            result = query.resolve_for(self)
            raise Capybara::ExpectationNotMet, result.failure_message unless result.matches_count?
            result
          end
        end
      end
    end
  end
end

我们现在已经升级到Capybara 3.15.0,看起来像Capybara::Query已经被废弃了。我尝试使用Queries::SelectorQuery而不是Query,如下所示

代码语言:javascript
运行
复制
session_options = Capybara.session_options
query = Capybara::Queries::SelectorQuery.new(*args, session_options: session_options)

但是接下来的断言失败了

代码语言:javascript
运行
复制
def content_xpath
  unless @content_xpath
    @content_xpath = "//td[@class='clsCenterButton' and ./label[contains(text(),'#{@label}')]]"
    @content_xpath = "//td[@class='clsCenterButton' and ./label[@title='#{@label}']]" if page.all(@content_xpath, visible: true).count>1
  end
  @content_xpath
end

未使用的参数传递给Capybara::Query::SelectorQuery:{:visible=>true}

代码语言:javascript
运行
复制
using_wait_time 10 do
  expect(page).to have_selector content_xpath
  expect(page).to have_selector content_xpath, visible: !(@collapsed)
end

未使用的参数传递给Capybara::Query::SelectorQuery:{:visible=>true}

Gemfile (升级前)

代码语言:javascript
运行
复制
source 'http://rubygems.org'
ruby '2.0.0'

gem 'cucumber', '2.0.0'
gem 'gherkin'
gem 'rspec-expectations', '3.2'
gem 'rspec'
gem 'capybara', '2.7.1'
gem 'selenium-webdriver', '2.53.4'
gem 'cuporter', '~>0.3.14'
gem 'nokogiri', '~>1.6.0'
gem 'savon', '~>2.1.0'
gem 'nori', '~>2.0.4'
gem 'chronic', '0.9.1'
gem 'json', '~>1.7.6'
gem 'rest-client', '~>1.6.7'
gem 'flog', '~>4.1.0'
gem 'flay', '~>2.3.0'
gem 'roodi', '~>2.1.0'
gem "require_all", "~> 1.3.2"
gem 'mongo', "~> 1.12.5"
gem 'bson_ext', "~> 1.12.5"
gem 'xml-simple', '~> 1.1.3'
gem 'roo', '~> 1.2.3'
gem "zip-zip", "~> 0.2"
gem 'rubyzip', '1.0.0'
gem 'tiny_tds', '0.7.0'
gem 'poltergeist', '1.10.0'
gem 'addressable', '2.4.0'
gem 'rack', '1.6.4'
gem 'cuke_sniffer'
gem 'rubocop'
gem 'net-ssh', '2.9.2'
gem 'sinatra'
gem 'cucumber_statistics'
gem 'activesupport', '4.2.5.2'
gem 'headless', '2.2.3'
gem 'colorize'
gem 'parallel'
gem 'parallel_tests'

Gemfile (升级后)

代码语言:javascript
运行
复制
source 'http://rubygems.org'
ruby '2.3.0'

gem 'cucumber', '2.2.0'
gem 'gherkin', '6.0.15'
gem 'rspec-expectations', '3.8.2'
gem 'rspec', '3.8.0'
gem 'capybara', '3.15.0'
gem 'selenium-webdriver', '3.141.0'
gem 'cuporter', '0.3.14'
gem 'nokogiri', '1.10.2'
gem 'savon', '2.12.0'
gem 'nori', '2.6.0'
gem 'chronic', '0.10.2'
gem 'json', '2.2.0'
gem 'rest-client', '2.0.2'
gem 'flog', '4.6.2'
gem 'flay', '2.12.0'
gem 'roodi', '5.0.0'
gem 'require_all', '1.5.0'
gem 'mongo', '2.8.0'
gem 'bson_ext', '1.5.1'
gem 'xml-simple', '1.1.5'
gem 'roo', '2.8.2'
gem "zip-zip", '0.3'
gem 'rubyzip', '1.2.2'
gem 'tiny_tds', '2.1.2'
gem 'poltergeist', '1.18.1'
gem 'addressable', '2.6.0'
gem 'rack', '2.0.6'
gem 'cuke_sniffer', '1.1.0'
gem 'rubocop', '0.66.0'
gem 'net-ssh', '5.2.0'
gem 'sinatra', '2.0.5'
gem 'cucumber_statistics', '2.3.0'
gem 'activesupport', '5.2.2.1'
gem 'headless', '2.3.1'
gem 'colorize', '0.8.1'
gem 'parallel', '1.16.0'
gem 'parallel_tests', '2.28.0'
gem 'geckodriver-helper', '0.23.0'

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 15:14:11

看起来,您的all方法只是试图将等待行为添加到Capybara内置的all方法中(并以一种非常奇怪的方式进行,这也会破坏选择器类型的灵活性)。无论如何,这都成了Capybara 3的默认行为,所以我建议您移除您的all猴子区。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55492489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档