From 6dbcc4e98b552fa05773f8d3258baef57352beeb Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Tue, 31 Dec 2019 15:10:51 -0600 Subject: [PATCH 01/10] get latest watir and bump version --- Gemfile | 2 +- generators/new_project/templates/gemfile.rb.erb | 2 +- lib/watirmark.rb | 2 +- lib/watirmark/version.rb | 2 +- watirmark.gemspec | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 5f78b85..eb03e09 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gemspec group :development do - gem 'watir-webdriver' + gem 'watir' gem 'rdoc' gem 'rspec', '2.99' gem 'rake' 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/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..85a2b03 100644 --- a/watirmark.gemspec +++ b/watirmark.gemspec @@ -14,7 +14,7 @@ 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('uuid', '~> 2.3.7') From efd3241d08eafcd72947cbaac7a81c8d080e6ad0 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Tue, 31 Dec 2019 15:13:40 -0600 Subject: [PATCH 02/10] fix deprecated and moved things --- .../extensions/webdriver_extensions.rb | 70 +++++++++---------- lib/watirmark/session.rb | 2 +- watirmark.gemspec | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/lib/watirmark/extensions/webdriver_extensions.rb b/lib/watirmark/extensions/webdriver_extensions.rb index ffa3ab1..69c6c0d 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 @@ -111,38 +111,38 @@ def getAllContents class Element - 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 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 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 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/watirmark.gemspec b/watirmark.gemspec index 85a2b03..500a94a 100644 --- a/watirmark.gemspec +++ b/watirmark.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |s| s.require_paths = %w(lib) 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') From 52041c6d2b73b291a14d9ac193f3403d2c2f4dd6 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Tue, 31 Dec 2019 15:14:58 -0600 Subject: [PATCH 03/10] bump cucumber to latest 2.x - we can not go to 3 because it breaks all of our models --- Gemfile | 4 ++-- lib/watirmark/models/cucumber_helper.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index eb03e09..720267f 100644 --- a/Gemfile +++ b/Gemfile @@ -9,8 +9,8 @@ group :development do 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/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 = /\[([^\[\]]+)\]/ From 581db9f4816be2b02b4ec6a65511ac3cc7cc3a40 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Thu, 2 Jan 2020 09:30:33 -0600 Subject: [PATCH 04/10] add some logging to help debugging --- lib/watirmark/controller/controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/watirmark/controller/controller.rb b/lib/watirmark/controller/controller.rb index b4406fa..5c0080c 100644 --- a/lib/watirmark/controller/controller.rb +++ b/lib/watirmark/controller/controller.rb @@ -122,6 +122,7 @@ 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}=", value(keyed_element)) @@ -129,6 +130,7 @@ def populate_keyword_value(keyed_element) 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)) From 8b295270c94e487d547aca42ccea2175a9f197e5 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Thu, 2 Jan 2020 09:31:21 -0600 Subject: [PATCH 05/10] fix bug with radios not setting correctly --- lib/watirmark/extensions/webdriver_extensions.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/watirmark/extensions/webdriver_extensions.rb b/lib/watirmark/extensions/webdriver_extensions.rb index 69c6c0d..ba98539 100644 --- a/lib/watirmark/extensions/webdriver_extensions.rb +++ b/lib/watirmark/extensions/webdriver_extensions.rb @@ -86,7 +86,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 +100,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 From a10079874602919a27d7fea75e18fa78ddf89870 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Thu, 2 Jan 2020 09:31:58 -0600 Subject: [PATCH 06/10] fix bug with setting numbers on a SelectList --- lib/watirmark/page/keyed_element.rb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) 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 From ee561870842dcfcf049930617cc318590344451f Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Thu, 2 Jan 2020 09:32:32 -0600 Subject: [PATCH 07/10] fix bug with tables not working --- lib/watirmark/extensions/webdriver_extensions.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/watirmark/extensions/webdriver_extensions.rb b/lib/watirmark/extensions/webdriver_extensions.rb index ba98539..2774623 100644 --- a/lib/watirmark/extensions/webdriver_extensions.rb +++ b/lib/watirmark/extensions/webdriver_extensions.rb @@ -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 From ab9bef3a5e79128578b7cbda20756a4197fb7d4a Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Thu, 2 Jan 2020 09:33:28 -0600 Subject: [PATCH 08/10] clean up deprecation messages --- lib/watirmark/controller/controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/watirmark/controller/controller.rb b/lib/watirmark/controller/controller.rb index 5c0080c..40550d1 100644 --- a/lib/watirmark/controller/controller.rb +++ b/lib/watirmark/controller/controller.rb @@ -124,7 +124,7 @@ def after_keyword(keyed_element) 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 From ed03e368be0449ff72cf3656eda5acf9a2121f08 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Wed, 8 Jan 2020 09:50:08 -0600 Subject: [PATCH 09/10] re-add alias for "nextsibling" --- lib/watirmark/extensions/webdriver_extensions.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/watirmark/extensions/webdriver_extensions.rb b/lib/watirmark/extensions/webdriver_extensions.rb index 2774623..ef55381 100644 --- a/lib/watirmark/extensions/webdriver_extensions.rb +++ b/lib/watirmark/extensions/webdriver_extensions.rb @@ -127,7 +127,7 @@ class Element # e = locate_dom_element(:getNextSibling) # e.nil? ? element(xpath: './following-sibling::*') : e # end - # alias_method :nextsibling, :next_sibling + alias_method :nextsibling, :next_sibling # # def previous_sibling # e = locate_dom_element(:getPreviousSibling) From ec224679dc9700fafe0d8766ba3e27e9f00dd865 Mon Sep 17 00:00:00 2001 From: Matthew Mazaika Date: Mon, 3 Feb 2020 20:15:47 -0600 Subject: [PATCH 10/10] update override for catching StaleElementReferenceError when switching frames --- lib/watirmark/extensions/webdriver_extensions.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/watirmark/extensions/webdriver_extensions.rb b/lib/watirmark/extensions/webdriver_extensions.rb index ef55381..2a25850 100644 --- a/lib/watirmark/extensions/webdriver_extensions.rb +++ b/lib/watirmark/extensions/webdriver_extensions.rb @@ -176,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