diff --git a/Gemfile b/Gemfile index 5f78b85..720267f 100644 --- a/Gemfile +++ b/Gemfile @@ -3,14 +3,14 @@ source "https://rubygems.org" gemspec group :development do - gem 'watir-webdriver' + gem 'watir' gem 'rdoc' gem 'rspec', '2.99' gem 'rake' gem 'bundler' gem 'mocha', '0.12.8', :require => false - gem 'cucumber' - gem 'gherkin' + gem 'cucumber', '2.99.0' + gem 'gherkin', '~>4.0' gem 'rspec-mocks' gem 'simplecov' end diff --git a/generators/new_project/templates/gemfile.rb.erb b/generators/new_project/templates/gemfile.rb.erb index 97c3c07..02baf43 100644 --- a/generators/new_project/templates/gemfile.rb.erb +++ b/generators/new_project/templates/gemfile.rb.erb @@ -1,7 +1,7 @@ source "https://rubygems.org" gem 'watirmark', :git => 'https://github.com/convio/watirmark.git' -gem 'watir-webdriver' +gem 'watir' gem 'rspec' gem 'rake' gem 'builder' diff --git a/lib/watirmark.rb b/lib/watirmark.rb index 07fb43c..bf1a50b 100644 --- a/lib/watirmark.rb +++ b/lib/watirmark.rb @@ -2,7 +2,7 @@ Watirmark::Configuration.instance.reload require 'watirmark/at_exit' -require 'watir-webdriver' +require 'watir' require 'watirmark/extensions/webdriver_extensions' require 'watirmark/extensions/ruby_extensions' require 'watirmark/session' diff --git a/lib/watirmark/controller/controller.rb b/lib/watirmark/controller/controller.rb index b4406fa..40550d1 100644 --- a/lib/watirmark/controller/controller.rb +++ b/lib/watirmark/controller/controller.rb @@ -122,13 +122,15 @@ def after_keyword(keyed_element) end def populate_keyword_value(keyed_element) + Watirmark.logger.info"Attempting to populate the keyword [#{keyed_element.keyword}] with value [#{value(keyed_element)}]" call_method_if_exists("populate_#{keyed_element.keyword}") do - @view.send(keyed_element.keyword).wait_until_present + @view.send(keyed_element.keyword).wait_until(&:present?) @view.send("#{keyed_element.keyword}=", value(keyed_element)) end end def verify_keyword_value(keyed_element) + Watirmark.logger.info"Attempting to verify the keyword [#{keyed_element.keyword}] matches [#{value(keyed_element)}]" call_method_if_exists("verify_#{keyed_element.keyword}") do keyed_element.get.wait_until_present assert_equal(keyed_element.get, value(keyed_element)) diff --git a/lib/watirmark/extensions/webdriver_extensions.rb b/lib/watirmark/extensions/webdriver_extensions.rb index ffa3ab1..2a25850 100644 --- a/lib/watirmark/extensions/webdriver_extensions.rb +++ b/lib/watirmark/extensions/webdriver_extensions.rb @@ -1,4 +1,4 @@ -require 'watir-webdriver/extensions/select_text' +require 'watir/elements/select' module Watir @@ -48,10 +48,10 @@ def download_links(*args) end end - module Atoms - ATOMS[:getPreviousSibling] = File.read(File.expand_path("../atoms/getPreviousSibling.js", __FILE__)) - ATOMS[:getNextSibling] = File.read(File.expand_path("../atoms/getNextSibling.js", __FILE__)) - end + # module Atoms + # ATOMS[:getPreviousSibling] = File.read(File.expand_path("../atoms/getPreviousSibling.js", __FILE__)) + # ATOMS[:getNextSibling] = File.read(File.expand_path("../atoms/getNextSibling.js", __FILE__)) + # end class Table < HTMLElement def each @@ -61,12 +61,14 @@ def each class TableRow < HTMLElement def each - cells.each { |x| yield x } + # TODO: not 100% sure this is a complete fix + tds.each { |x| yield x } end def column(what) column = 0 - parent.th(:text => what).when_present.parent.cells.each do |cell| + # TODO: not 100% sure this is a complete fix + parent.th(:text => what).when_present.parent.ths.each do |cell| if what.kind_of? String return self[column] if cell.text == what else @@ -86,7 +88,12 @@ class Radio < Input alias :old_radio_set :set def set(value=nil) - @selector.update(:value => value.to_s) if value + if value + @selector.update(:value => value.to_s) + build + locate + end + old_radio_set end @@ -95,7 +102,12 @@ def set(value=nil) alias :old_radio_set? :set? def set?(value=nil) - @selector.update(:value => value.to_s) if value + if value + @selector.update(:value => value.to_s) + build + locate + end + old_radio_set? end end @@ -111,38 +123,38 @@ def getAllContents class Element - def next_sibling - e = locate_dom_element(:getNextSibling) - e.nil? ? element(xpath: './following-sibling::*') : e - end + # def next_sibling + # e = locate_dom_element(:getNextSibling) + # e.nil? ? element(xpath: './following-sibling::*') : e + # end alias_method :nextsibling, :next_sibling - - def previous_sibling - e = locate_dom_element(:getPreviousSibling) - e.nil? ? element(xpath: './preceding-sibling::*') : e - end - alias_method :prev_sibling, :previous_sibling + # + # def previous_sibling + # e = locate_dom_element(:getPreviousSibling) + # e.nil? ? element(xpath: './preceding-sibling::*') : e + # end + # alias_method :prev_sibling, :previous_sibling alias_method :prevsibling, :previous_sibling - def locate_dom_element(method) - assert_exists - - e = element_call { execute_atom method, @element } - - if e.kind_of?(Selenium::WebDriver::Element) - Watir.element_class_for(e.tag_name.downcase).new(@parent, :element => e) - end - end - - alias_method :old_element_call, :element_call - def element_call &block - old_element_call &block - rescue Selenium::WebDriver::Error::UnknownError => ex - raise unless ex.message.include?("Element is not clickable at point") - reset! - assert_exists - retry - end + # def locate_dom_element(method) + # assert_exists + # + # e = element_call { execute_atom method, @element } + # + # if e.kind_of?(Selenium::WebDriver::Element) + # Watir.element_class_for(e.tag_name.downcase).new(@parent, :element => e) + # end + # end + + # alias_method :old_element_call, :element_call + # def element_call &block + # old_element_call &block + # rescue Selenium::WebDriver::Error::UnknownError => ex + # raise unless ex.message.include?("Element is not clickable at point") + # reset! + # assert_exists + # retry + # end alias_method :old_text, :text def text @@ -164,13 +176,13 @@ def check_deprecation(element) end end - class IFrame < HTMLElement - alias_method :old_switch_to!, :switch_to! - def switch_to! + class FramedDriver + alias_method :old_switch!, :switch! + def switch! retry_attempts ||= 0 - old_switch_to! - rescue Watir::Exception::UnknownFrameException - # UnknownFrameException is workaround for- https://code.google.com/p/chromedriver/issues/detail?id=948 + old_switch! + rescue Selenium::WebDriver::Error::StaleElementReferenceError + # TODO: see why this is a problem and port to watir retry_attempts += 1 retry if retry_attempts == 1 end diff --git a/lib/watirmark/models/cucumber_helper.rb b/lib/watirmark/models/cucumber_helper.rb index 5cb443a..84b4f92 100644 --- a/lib/watirmark/models/cucumber_helper.rb +++ b/lib/watirmark/models/cucumber_helper.rb @@ -25,8 +25,8 @@ def format_value(value) def insert_model(text) # cucumber 2.0 defines a Core module between Cucumber and Ast - doc_class = Cucumber::Ast.const_defined?(:DocString) ? Cucumber::Ast::DocString : Cucumber::Core::Ast::DocString - return text unless text.is_a?(String) || text.is_a?(doc_class) + # doc_class = Cucumber::Core::Ast.const_defined?(:DocString) ? Cucumber::Ast::DocString : Cucumber::Core::Ast::DocString + return text unless text.is_a?(String) || text.is_a?(Cucumber::Core::Ast::DocString) result = text method_regexp = /\[([^\[\]]+)\]\.(\w+)/ model_regexp = /\[([^\[\]]+)\]/ diff --git a/lib/watirmark/page/keyed_element.rb b/lib/watirmark/page/keyed_element.rb index 06933ab..bd256fb 100644 --- a/lib/watirmark/page/keyed_element.rb +++ b/lib/watirmark/page/keyed_element.rb @@ -33,21 +33,21 @@ def set val element = get val = @map.lookup(val) if @map case val - when 'nil' - element.clear # workaround to empty element values + when 'nil' + element.clear # workaround to empty element values + else + case element + when Watir::Radio + element.set val + when Watir::CheckBox + val ? element.set : element.clear + when Watir::Select + element.select (val.is_a? Integer) ? val.to_s : val + when Watir::Button + element.click else - case element - when Watir::Radio - element.set val - when Watir::CheckBox - val ? element.set : element.clear - when Watir::Select - element.select val - when Watir::Button - element.click - else - element.value = val - end + element.value = val + end end end diff --git a/lib/watirmark/session.rb b/lib/watirmark/session.rb index f13140f..0aaf633 100644 --- a/lib/watirmark/session.rb +++ b/lib/watirmark/session.rb @@ -238,7 +238,7 @@ def sauce_config(sb) end def initialize_page_checkers - POST_WAIT_CHECKERS.each { |p| Page.browser.add_checker p } + POST_WAIT_CHECKERS.each { |p| Page.browser.after_hooks.add p } end end diff --git a/lib/watirmark/version.rb b/lib/watirmark/version.rb index 3d59652..3230374 100644 --- a/lib/watirmark/version.rb +++ b/lib/watirmark/version.rb @@ -1,5 +1,5 @@ module Watirmark module Version - STRING = '5.29.4' + STRING = '6.0.0' end end diff --git a/watirmark.gemspec b/watirmark.gemspec index e2cc1f7..500a94a 100644 --- a/watirmark.gemspec +++ b/watirmark.gemspec @@ -14,9 +14,9 @@ Gem::Specification.new do |s| s.test_files = Dir['spec/**/*.rb'] s.executables = 'watirmark' s.require_paths = %w(lib) - s.add_dependency('watir-webdriver', '~> 0.8') + s.add_dependency('watir') s.add_dependency('american_date', '~> 1.1.0') - s.add_dependency('logger', '~> 1.2.8') + s.add_dependency('logger') s.add_dependency('uuid', '~> 2.3.7') s.add_dependency('nokogiri', '~> 1.6.0') s.add_dependency('thor', '~> 0.19.1')