Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

7 specs failures open clean checkout #65

Open
robisenberg opened this issue Jul 20, 2017 · 2 comments
Open

7 specs failures open clean checkout #65

robisenberg opened this issue Jul 20, 2017 · 2 comments

Comments

@robisenberg
Copy link

Summary

Using Ruby 2.3.1, when I run the specs with:

$ bundle exec rake

I get 7 failures as follows (full output below.) Am I doing something wrong?

I will try with Ruby 2.3.3 which Circle CI seems to be using, but still, I wouldn't expect that to make any difference. I wanted to make some changes, but don't want to start when tests are not passing.

Failing spec output

$ be rake
/Users/rob/.rubies/ruby-2.3.1/bin/ruby -I/Users/rob/.gem/ruby/2.3.1/gems/rspec-core-3.5.2/lib:/Users/rob/.gem/ruby/2.3.1/gems/rspec-support-3.5.0/lib /Users/rob/.gem/ruby/2.3.1/gems/rspec-core-3.5.2/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Randomized with seed 39842
.....................................................................Unused parameters passed to Capybara::Queries::SelectorQuery : ["a link"]
FFUnused parameters passed to Capybara::Queries::SelectorQuery : ["a link"]
FF..............Unused parameters passed to Capybara::Queries::SelectorQuery : ["next page"]
F............................Unused parameters passed to Capybara::Queries::SelectorQuery : ["link in a form"]
F...............................................F.............................................................

Failures:

  1) PageMagic::ElementContext#method_missing method is a element defintion returns the sub page element
     Failure/Error: capybara_element.find(*args)

     Nokogiri::CSS::SyntaxError:
       unexpected '$' after ''
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:87:in `on_error'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:62:in `parse'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:79:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css.rb:23:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:198:in `block in xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `block in css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:107:in `css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/browser.rb:87:in `find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/driver.rb:71:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:103:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:110:in `block in resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:81:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:108:in `resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:35:in `block in find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:33:in `find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/session.rb:699:in `block (2 levels) in <class:Session>'
     # ./lib/page_magic/element/query.rb:23:in `execute'
     # ./lib/page_magic/element_context.rb:35:in `find'
     # ./lib/page_magic/element_context.rb:24:in `method_missing'
     # ./spec/page_magic/element_context_spec.rb:29:in `block (4 levels) in <module:PageMagic>'

  2) PageMagic::ElementContext#method_missing method is a element defintion passes arguments through to the element definition
     Failure/Error: raise AmbiguousQueryException, e.message

     PageMagic::AmbiguousQueryException:
       Ambiguous match, found 2 elements matching css "a"
     # ./lib/page_magic/element/query.rb:26:in `rescue in execute'
     # ./lib/page_magic/element/query.rb:18:in `execute'
     # ./lib/page_magic/element_context.rb:35:in `find'
     # ./lib/page_magic/element_context.rb:24:in `method_missing'
     # ./spec/page_magic/element_context_spec.rb:38:in `block (4 levels) in <module:PageMagic>'
     # ------------------
     # --- Caused by: ---
     # Capybara::Ambiguous:
     #   Ambiguous match, found 2 elements matching css "a"
     #   /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:41:in `block in find'

  3) PageMagic::ElementContext#method_missing method is a element defintion does not evaluate any of the other definitions
     Failure/Error: capybara_element.find(*args)

     Nokogiri::CSS::SyntaxError:
       unexpected '$' after ''
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:87:in `on_error'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:62:in `parse'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:79:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css.rb:23:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:198:in `block in xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `block in css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:107:in `css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/browser.rb:87:in `find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/driver.rb:71:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:103:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:110:in `block in resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:81:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:108:in `resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:35:in `block in find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:33:in `find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/session.rb:699:in `block (2 levels) in <class:Session>'
     # ./lib/page_magic/element/query.rb:23:in `execute'
     # ./lib/page_magic/element_context.rb:35:in `find'
     # ./lib/page_magic/element_context.rb:24:in `method_missing'
     # ./spec/page_magic/element_context_spec.rb:49:in `block (4 levels) in <module:PageMagic>'

  4) PageMagic::ElementContext#method_missing method is a element defintion more than one match found in the browser returns an array of element definitions
     Failure/Error: raise AmbiguousQueryException, e.message

     PageMagic::AmbiguousQueryException:
       Ambiguous match, found 2 elements matching css "a"
     # ./lib/page_magic/element/query.rb:26:in `rescue in execute'
     # ./lib/page_magic/element/query.rb:18:in `execute'
     # ./lib/page_magic/element_context.rb:35:in `find'
     # ./lib/page_magic/element_context.rb:24:in `method_missing'
     # ./spec/page_magic/element_context_spec.rb:55:in `block (5 levels) in <module:PageMagic>'
     # ------------------
     # --- Caused by: ---
     # Capybara::Ambiguous:
     #   Ambiguous match, found 2 elements matching css "a"
     #   /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:41:in `block in find'

  5) PageMagic::InstanceMethods method_missing gives access to the elements defined on your page classes
     Failure/Error: capybara_element.find(*args)

     Nokogiri::CSS::SyntaxError:
       unexpected '$' after ''
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:87:in `on_error'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:62:in `parse'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:79:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css.rb:23:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:198:in `block in xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `block in css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:107:in `css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/browser.rb:87:in `find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/driver.rb:71:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:103:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:110:in `block in resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:81:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:108:in `resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:35:in `block in find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:33:in `find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/session.rb:699:in `block (2 levels) in <class:Session>'
     # ./lib/page_magic/element/query.rb:23:in `execute'
     # ./lib/page_magic/element_context.rb:35:in `find'
     # ./lib/page_magic/element_context.rb:24:in `method_missing'
     # ./lib/page_magic/instance_methods.rb:32:in `method_missing'
     # ./lib/page_magic/session.rb:71:in `method_missing'
     # ./spec/page_magic/instance_methods_spec.rb:84:in `block (3 levels) in <module:PageMagic>'

  6) PageMagic::Element#method_missing no element definition and not a capybara method calls method on parent element
     Failure/Error: capybara_element.find(*args)

     Nokogiri::CSS::SyntaxError:
       unexpected '$' after ''
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:87:in `on_error'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:62:in `parse'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css/parser_extras.rb:79:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/css.rb:23:in `xpath_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:198:in `block in xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:197:in `xpath_query_from_css_rule'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `block in css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `map'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:192:in `css_internal'
     # /Users/rob/.gem/ruby/2.3.1/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:107:in `css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/rack_test/node.rb:99:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:103:in `find_css'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:110:in `block in resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:81:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/queries/selector_query.rb:108:in `resolve_for'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:35:in `block in find'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/base.rb:85:in `synchronize'
     # /Users/rob/.gem/ruby/2.3.1/gems/capybara-2.7.1/lib/capybara/node/finders.rb:33:in `find'
     # ./lib/page_magic/element/query.rb:23:in `execute'
     # ./lib/page_magic/element_context.rb:35:in `find'
     # ./lib/page_magic/element_context.rb:24:in `method_missing'
     # ./lib/page_magic/element.rb:90:in `method_missing'
     # ./spec/element_spec.rb:213:in `block (4 levels) in <module:PageMagic>'

  7) PageMagic::Elements#element sets the selector and type
     Failure/Error: expect(instance.element_by_name(:alias)).to eq(expected_definition)

       expected: #<PageMagic::ElementDefinitionBuilder:0x007ff0dee92d30 @definition_class=PageMagic::Element, @selecto...ent::QueryBuilder:0x007ff0df0fea88 @type=:field>, @options={:multiple_results=>false}, @element=nil>
            got: #<PageMagic::ElementDefinitionBuilder:0x007ff0dee91e30 @definition_class=#<Class:0x007ff0dee921f0>, @...lement::QueryBuilder:0x007ff0df0feab0 @type=nil>, @options={:multiple_results=>false}, @element=nil>

       (compared using ==)

       Diff:


       @@ -1,9 +1,8 @@
       -#<PageMagic::ElementDefinitionBuilder:0x007ff0dee92d30
       - @definition_class=PageMagic::Element,
       +#<PageMagic::ElementDefinitionBuilder:0x007ff0dee91e30
       + @definition_class=#<Class:0x007ff0dee921f0>,
         @element=nil,
         @options={:multiple_results=>false},
       - @query_builder=
       -  #<PageMagic::Element::QueryBuilder:0x007ff0df0fea88 @type=:field>,
       + @query_builder=#<PageMagic::Element::QueryBuilder:0x007ff0df0feab0 @type=nil>,
         @selector={:id=>"child"},
       - @type=:text_field>
       + @type=:element>

     # ./spec/page_magic/elements_spec.rb:27:in `block (3 levels) in <module:PageMagic>'

Finished in 1.33 seconds (files took 1.22 seconds to load)
226 examples, 7 failures

Failed examples:

rspec ./spec/page_magic/element_context_spec.rb:28 # PageMagic::ElementContext#method_missing method is a element defintion returns the sub page element
rspec ./spec/page_magic/element_context_spec.rb:33 # PageMagic::ElementContext#method_missing method is a element defintion passes arguments through to the element definition
rspec ./spec/page_magic/element_context_spec.rb:42 # PageMagic::ElementContext#method_missing method is a element defintion does not evaluate any of the other definitions
rspec ./spec/page_magic/element_context_spec.rb:53 # PageMagic::ElementContext#method_missing method is a element defintion more than one match found in the browser returns an array of element definitions
rspec ./spec/page_magic/instance_methods_spec.rb:83 # PageMagic::InstanceMethods method_missing gives access to the elements defined on your page classes
rspec ./spec/element_spec.rb:212 # PageMagic::Element#method_missing no element definition and not a capybara method calls method on parent element
rspec ./spec/page_magic/elements_spec.rb:21 # PageMagic::Elements#element sets the selector and type

Randomized with seed 39842

Coverage report generated for RSpec to /Users/rob/Dropbox/dev/projects/ruby/gems/page_magic/coverage. 525 / 528 LOC (99.43%) covered.
/Users/rob/.rubies/ruby-2.3.1/bin/ruby -I/Users/rob/.gem/ruby/2.3.1/gems/rspec-core-3.5.2/lib:/Users/rob/.gem/ruby/2.3.1/gems/rspec-support-3.5.0/lib /Users/rob/.gem/ruby/2.3.1/gems/rspec-core-3.5.2/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed
@robisenberg
Copy link
Author

It's the same with Ruby 2.3.3.

@lashd
Copy link
Contributor

lashd commented Oct 3, 2017

@robisenberg, the answer to this one is a bit complicated but essentially it is down to a bug that occurred in ruby 2.3.

PageMagic::Elements makes use of the __callee__ method. This is used to record the kind of element a developer is declaring in their page class.

All methods that are used to declare page elements, e.g. text_field, select_list etc..., are are aliases of the PageMagic::Elements#element method and __callee__ should return the aliased name when the aliases are invoked. However, due to the bug mentioned above, the name returned is always element and in the tests, where it is a different kind of element that has been defined, this causes an invalid query to be built and executed against the browser. This in turn results in the Nokogiri error that you are seeing above. The last of the failing tests is also highlighting the problem by resolving the wrong type of Element.

In summary, I think the recommendation is to steer clear of this ruby version and use one in which the bug is not present. E.g. < 2.2 or > 2.4.

If you agree, we could add a release note to the readme or something and close this issue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants