为什么在传入':css'时从watir-webdriver方法“assert_valid_as_attribute”获得“无效属性”异常?

问题描述 投票:0回答:1

我最近继承了一个运行watir-webdriver(0.6.4)的Ruby测试套件,我处于不幸的情况,该套件在我的同事的机器上运行得很好,但有几个案例错误。我已经尝试将我所有宝石的每个版本锁定到他的机器上,以尝试解决兼容性问题,但没有骰子。核心错误似乎是我从watir的内部`assert_valid_as_attribute'方法得到以下异常:

(Watir::Exception::MissingWayOfFindingObjectException: invalid attribute: :css)

我的代码中的原始调用是:

search_results.selectable_cards_plural.take(assets_selected).each { |assets| assets.fire_event ("onclick") }

search_results{...}.take返回一个div数组。

有没有人见过这个问题?我已经看到另外两个提到这个问题的SO帖子,但它们似乎都没有解决我的特定问题。

我已经在下面包含了我的gemfile.lock的一部分,以防任何人都可以轻松发现兼容性问题。我正在运行Ruby 2.5.0。是的,我计划在不久的将来更新测试以运行更新的gem版本,但我希望同时运行这些传统的回归测试。

上面提到的选择器:def search_results; @browser.div(:class, 'search-results-grid') end def selectable_cards_plural; divs(:css => 'div.p-card-hover.p-card-selectable:not(.p-card-selected)') end

选择的元素是:class =“p-card-hover p-card-selectable css-g6ribn-StyledCardHover-visible-visible-visible-visible-StyledCardHover erkh22a0”

环境信息:MacOS macOS 10.14.3(Mojave)Chrome版本72.0.3626.121浏览器驱动程序:@browser = Watir :: Browser.new:chrome,:prefs => chrome_prefs,switches:%w [ - window-size = 1600, 900 --ignore-certificate-errors --disable-popup-blocking --disable-translate]

堆栈跟踪:

Asset Section: Adding # When selecting specific # from search adds assets to section
     Failure/Error: search_results.selectable_cards_plural.take(assets_selected).each { |assets| assets.fire_event ("onclick") }

     Watir::Exception::MissingWayOfFindingObjectException:
       invalid attribute: :css
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:238:in `assert_valid_as_attribute'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:219:in `normalize_selector'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:198:in `block in normalized_selector'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:195:in `each'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:195:in `normalized_selector'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:98:in `find_all_by_multiple'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/locators/element_locator.rb:46:in `locate_all'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/element_collection.rb:96:in `elements'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/element_collection.rb:86:in `to_a'
     # /Users/jnguyen/.rvm/gems/ruby-2.5.0/gems/watir-webdriver-0.6.4/lib/watir-webdriver/element_collection.rb:29:in `each'
     # ./lib/live_editor/assets_le.rb:37:in `take'
     # ./lib/live_editor/assets_le.rb:37:in `select_assets'
     # ./spec/smoke/live_editor/standard/asset_add_num_spec.rb:23:in `block (3 levels) in <top (required)>'

Gemfile.lock的

    {...}
    commonwatir (4.0.0)
    rake (12.3.2)
    rspec (3.5.0)
      rspec-core (~> 3.5.0)
      rspec-expectations (~> 3.5.0)
      rspec-mocks (~> 3.5.0)
    rspec-core (3.5.2)
      rspec-support (~> 3.5.0)
    rspec-expectations (3.5.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.5.0)
    rspec-mocks (3.5.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.5.0)
    rspec-support (3.5.0)
    rspec_html_formatter (0.3.1)
      activesupport (>= 4.1.4)
      rouge (>= 1.6.1)
      rspec-core (>= 3.0.3)
    selenium-webdriver (2.53.4)
      childprocess (~> 0.5)
      rubyzip (~> 1.0)
      websocket (~> 1.0)
    watir (5.0.0)
      commonwatir (~> 4)
      watir-webdriver
    watir-rspec (2.0.3)
      rspec (~> 3.0)
      watir (~> 5.0)
    watir-scroll (0.1.0)
      watir-webdriver
    watir-webdriver (0.6.4)
      selenium-webdriver (>= 2.18.0)

PLATFORMS
  ruby

DEPENDENCIES
  {...}
  rake
  rspec (= 3.5.0)
  rspec-core (= 3.5.2)
  rspec_html_formatter (~> 0.3.1)
  selenium-webdriver (= 2.53.4)
  watir (~> 5.0.0)
  watir-rspec (= 2.0.3)
  watir-scroll (~> 0.1.0)
  watir-webdriver (= 0.6.4)

BUNDLED WITH
   1.17.3
ruby automated-tests ui-automation watir
1个回答
1
投票

似乎版本不匹配。

在v0.6.4中,以下内容将抛出异常:

gem 'selenium-webdriver', '=2.53.4'
gem 'watir-webdriver', '=0.6.7'

require 'watir-webdriver'

browser = Watir::Browser.new :chrome
at_exit { browser.close }
p browser.divs(:css => 'div').count
#=> `assert_valid_as_attribute': invalid attribute: :css (Watir::Exception::MissingWayOfFindingObjectException)

在这个版本中,对:css定位器的唯一支持就是它本身。上面的例子将包括:tag_name定位器,这是异常的原因。你将不得不使用#elements而不是divs

这在v0.6.8(https://github.com/watir/watir/pull/244)中得到了解决。我希望你的代码库至少是用v0.6.8创建的。

© www.soinside.com 2019 - 2024. All rights reserved.