watigiri 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2fd0e4b0bff75232878fbfa396d89e6d8c6bafbc
4
- data.tar.gz: 06ee3c3acf02723a8de7aca0b02e8f84422b56f5
3
+ metadata.gz: 9ab5b03da6791a3ea140287be1c54da77467dc2a
4
+ data.tar.gz: 3a97f2c0b646ceec77ee95a228b9e5211906fe77
5
5
  SHA512:
6
- metadata.gz: 8f919b5c53a445536ef18177c5609bce92995072a32048268c82763f262aa25916184e4c9fc07ce1a5d800001cd5b4090a2347f4fabd4208915e266c5df821c1
7
- data.tar.gz: 5dd9eb0bf66df384af9ff4430bc26e0e32e87b2ca07c372ad969b2d831fab0b2b92e7f071482dfe98a6113ed1d62bed1bb5c0b0fdddaba5a5d56e65400e3ceea
6
+ metadata.gz: fd78179291c518fe0f759d1df7d350cccdce98ce3e7e480e31c4c5cbebb961ec8901a4a9126438568d900aa1876e7b04eb0c44e3af497840f9305066dbc4cd0f
7
+ data.tar.gz: d9b0c1f1ff1d3edef4fd625c073648c7d8fe1612355d7d50299c4f0d0d43a9802f70ece28c6ae585f202a15215789bbe4bbb9146eb0831d76cc777b47c1840c1
data/.rubocop.yml ADDED
@@ -0,0 +1,39 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3.7
3
+
4
+ # Cop supports --auto-correct.
5
+ # Configuration parameters: EnforcedStyle.
6
+ # SupportedStyles: when_needed, always, never
7
+ Style/FrozenStringLiteralComment:
8
+ Enabled: false
9
+
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
12
+ # SupportedStyles: space, no_space, compact
13
+ # SupportedStylesForEmptyBraces: space, no_space
14
+ Layout/SpaceInsideHashLiteralBraces:
15
+ EnforcedStyle: no_space
16
+
17
+ Style/CommentedKeyword:
18
+ Enabled: false
19
+
20
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
21
+ # URISchemes: http, https
22
+ Metrics/LineLength:
23
+ Max: 120
24
+
25
+ # Configuration parameters: CountComments, ExcludedMethods.
26
+ # ExcludedMethods: refine
27
+ Metrics/BlockLength:
28
+ Exclude:
29
+ - 'spec/**/*'
30
+
31
+ Style/Documentation:
32
+ Enabled: false
33
+
34
+ # Configuration parameters: CountComments.
35
+ Metrics/MethodLength:
36
+ Max: 13
37
+
38
+ Metrics/CyclomaticComplexity:
39
+ Max: 10
data/.travis.yml CHANGED
@@ -1,8 +1,15 @@
1
- sudo: false
1
+ sudo: required
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.1
4
+ - 2.3.7
5
5
  before_install:
6
6
  - export DISPLAY=:99
7
7
  - sh -e /etc/init.d/xvfb start
8
8
  - export PATH=~/.webdrivers:$PATH
9
+ script: bundle exec rake $RAKE_TASK
10
+ env:
11
+ - RAKE_TASK=spec
12
+ - RAKE_TASK=watirspec:run
13
+ - RAKE_TASK=rubocop
14
+ addons:
15
+ chrome: stable
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in watigiri.gemspec
6
6
  gemspec
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
@@ -7,3 +7,8 @@ require 'watirspec/rake_tasks'
7
7
  WatirSpec::RakeTasks.new
8
8
 
9
9
  task default: %i[spec watirspec:run]
10
+
11
+ require 'rubocop/rake_task'
12
+ RuboCop::RakeTask.new(:rubocop) do |t|
13
+ t.options = ['--display-cop-names']
14
+ end
@@ -1,5 +1,4 @@
1
1
  module Watir
2
-
3
2
  class Browser
4
3
  attr_reader :doc
5
4
 
@@ -30,5 +29,8 @@ module Watir
30
29
  body.text!
31
30
  end
32
31
 
32
+ def locator_namespace
33
+ @locator_namespace ||= Watigiri::Locators
34
+ end
33
35
  end # Browser
34
36
  end # Watir
@@ -1,7 +1,5 @@
1
1
  module Watir
2
-
3
2
  class Element
4
-
5
3
  attr_reader :doc
6
4
 
7
5
  #
@@ -34,10 +32,9 @@ module Watir
34
32
  text.strip
35
33
  end
36
34
 
37
- alias_method :el_stale?, :stale?
35
+ alias el_stale? stale?
38
36
  def stale?
39
37
  @doc.nil? && el_stale?
40
38
  end
41
-
42
39
  end # Element
43
40
  end # Watir
@@ -12,15 +12,12 @@ module Watir
12
12
  end
13
13
 
14
14
  class FramedDriver
15
-
16
15
  private
17
16
 
18
- alias_method :watir_switch!, :switch!
17
+ alias watir_switch! switch!
19
18
  def switch!
20
19
  @browser.doc = nil
21
20
  watir_switch!
22
21
  end
23
-
24
22
  end # FramedDriver
25
-
26
23
  end # Watir
@@ -16,16 +16,13 @@ module Watigiri
16
16
  module LocatorHelpers
17
17
  def locate
18
18
  @nokogiri = @selector.delete(:nokogiri)
19
- @regex = regex?
19
+ return super unless @nokogiri || regex?
20
20
 
21
- return super unless @nokogiri || @regex
22
- @query_scope.doc ||= if @query_scope.is_a?(Watir::Browser)
23
- Nokogiri::HTML(@query_scope.html).tap { |d| d.css('script').remove }
24
- else
25
- # This should be using `#fragment`, but can't because of
26
- # https://github.com/sparklemotion/nokogiri/issues/572
27
- Nokogiri::HTML(@query_scope.inner_html)
28
- end
21
+ # :inner_html should be using `#fragment`, but can't because of
22
+ # https://github.com/sparklemotion/nokogiri/issues/572
23
+ method = @query_scope.is_a?(Watir::Browser) ? :html : :inner_html
24
+
25
+ @query_scope.doc ||= Nokogiri::HTML(@query_scope.send(method)).tap { |d| d.css('script').remove }
29
26
 
30
27
  element = using_watir(:first)
31
28
  return if element.nil?
@@ -42,7 +39,7 @@ module Watigiri
42
39
 
43
40
  # "how" can only be :css or :xpath
44
41
  def locate_elements(how, what, _scope = @query_scope.wd)
45
- return super unless @nokogiri || @regex
42
+ return super unless @nokogiri || regex?
46
43
 
47
44
  @query_scope.doc.send(how, what).map do |el|
48
45
  Watigiri::Element.new element: el, selector: {how => what}
@@ -50,18 +47,18 @@ module Watigiri
50
47
  end
51
48
 
52
49
  def fetch_value(element, how)
53
- return super unless @nokogiri || @regex
54
- return super if element.is_a?(Selenium::WebDriver::Element)
55
- element = element.element if element.is_a?(Watigiri::Element)
50
+ element = update_element(element)
51
+ return if element.nil?
52
+
56
53
  case how
57
54
  when :text
58
55
  element.inner_text
59
56
  when :tag_name
60
57
  element.name.to_s.downcase
61
58
  when :href
62
- (href = element.attribute('href')) && href.to_s.strip
59
+ element.attribute('href')&.to_s
63
60
  else
64
- element.attribute(how.to_s.tr("_", "-")).to_s
61
+ element.attribute(how.to_s.tr('_', '-')).to_s
65
62
  end
66
63
  end
67
64
 
@@ -73,11 +70,21 @@ module Watigiri
73
70
  end
74
71
 
75
72
  def regex?
73
+ return @regex unless @regex.nil?
76
74
  return false unless (@selector.keys & %i[adjacent visible label text visible_text]).empty?
77
- @selector.values.any? { |v| v.is_a?(Regexp) }
75
+ @regex = @selector.values.any? { |v| v.is_a?(Regexp) }
78
76
  end
79
- end
80
77
 
78
+ def update_element(element)
79
+ if !(@nokogiri || regex?) || element.is_a?(Selenium::WebDriver::Element)
80
+ nil
81
+ elsif element.is_a?(Watigiri::Element)
82
+ element.element
83
+ else
84
+ element
85
+ end
86
+ end
87
+ end
81
88
 
82
89
  class Element
83
90
  class Locator < Watir::Locators::Element::Locator
@@ -134,15 +141,15 @@ module Watigiri
134
141
 
135
142
  tag_name = element.tag_name
136
143
 
137
- [:text, :value, :label].each do |key|
138
- if rx_selector.key?(key)
139
- correct_key = tag_name == 'input' ? :value : :text
140
- rx_selector[correct_key] = rx_selector.delete(key)
141
- end
144
+ %i[text value label].each do |key|
145
+ next unless rx_selector.key?(key)
146
+ correct_key = tag_name == 'input' ? :value : :text
147
+ rx_selector[correct_key] = rx_selector.delete(key)
142
148
  end
143
149
 
144
150
  rx_selector.all? do |how, what|
145
- what === fetch_value(element, how)
151
+ val = fetch_value(element, how)
152
+ what == val || val =~ /#{what}/
146
153
  end
147
154
  end
148
155
 
data/lib/watigiri.rb CHANGED
@@ -7,11 +7,3 @@ require 'extensions/watir/iframe'
7
7
 
8
8
  require 'watigiri/locators/element/locator'
9
9
  require 'watigiri/locators/element/selector_builder'
10
-
11
- Watir.locator_namespace = Watigiri::Locators
12
-
13
- # Use Watir Validator behaviors for all Elements
14
- Watigiri::Locators::Element::Validator = Watir::Locators::Element::Validator
15
- Watigiri::Locators::Button::Validator = Watir::Locators::Button::Validator
16
- Watigiri::Locators::TextField::Validator = Watir::Locators::TextField::Validator
17
-
data/watigiri.gemspec CHANGED
@@ -1,33 +1,33 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
 
5
4
  Gem::Specification.new do |spec|
6
- spec.name = "watigiri"
7
- spec.version = "0.4.0"
8
- spec.authors = ["Titus Fortner"]
9
- spec.email = ["titusfortner@gmail.com"]
5
+ spec.name = 'watigiri'
6
+ spec.version = '0.5.0'
7
+ spec.authors = ['Titus Fortner']
8
+ spec.email = ['titusfortner@gmail.com']
10
9
 
11
- spec.summary = %q{Nokogiri locator engine for Watir}
12
- spec.description = <<-DESCRIPTION_MESSAGE
13
- By default Watir locates elements with Selenium; this gem will replace Selenium calls
14
- with Nokogiri calls where designated.
10
+ spec.summary = 'Nokogiri locator engine for Watir'
11
+ spec.description = <<~DESCRIPTION_MESSAGE
12
+ By default Watir locates elements with Selenium; this gem will replace Selenium calls
13
+ with Nokogiri calls where designated.
15
14
  DESCRIPTION_MESSAGE
16
- spec.homepage = "http://github.com/titusfortner/watigiri"
17
- spec.license = "MIT"
15
+ spec.homepage = 'http://github.com/titusfortner/watigiri'
16
+ spec.license = 'MIT'
18
17
 
19
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
19
  f.match(%r{^(test|spec|features)/})
21
20
  end
22
- spec.bindir = "exe"
21
+ spec.bindir = 'exe'
23
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- spec.require_paths = ["lib"]
23
+ spec.require_paths = ['lib']
25
24
 
26
- spec.add_development_dependency "bundler", "~> 1.15"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
29
- spec.add_development_dependency "webdrivers", "~> 3.0"
25
+ spec.add_development_dependency 'bundler', '~> 1.15'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
+ spec.add_development_dependency 'rubocop'
29
+ spec.add_development_dependency 'webdrivers', '~> 3.3', '>= 3.3.3'
30
30
 
31
- spec.add_runtime_dependency "watir", "~> 6.10"
32
- spec.add_runtime_dependency "nokogiri"
31
+ spec.add_runtime_dependency 'nokogiri'
32
+ spec.add_runtime_dependency 'watir', '~> 6.12'
33
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watigiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-13 00:00:00.000000000 Z
11
+ date: 2018-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,33 +53,39 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: webdrivers
56
+ name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: watir
70
+ name: webdrivers
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '6.10'
76
- type: :runtime
75
+ version: '3.3'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 3.3.3
79
+ type: :development
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
83
  - - "~>"
81
84
  - !ruby/object:Gem::Version
82
- version: '6.10'
85
+ version: '3.3'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.3.3
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: nokogiri
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +100,20 @@ dependencies:
94
100
  - - ">="
95
101
  - !ruby/object:Gem::Version
96
102
  version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: watir
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '6.12'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '6.12'
97
117
  description: |
98
118
  By default Watir locates elements with Selenium; this gem will replace Selenium calls
99
119
  with Nokogiri calls where designated.
@@ -105,6 +125,7 @@ extra_rdoc_files: []
105
125
  files:
106
126
  - ".gitignore"
107
127
  - ".rspec"
128
+ - ".rubocop.yml"
108
129
  - ".travis.yml"
109
130
  - Gemfile
110
131
  - LICENSE.txt
@@ -138,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
159
  version: '0'
139
160
  requirements: []
140
161
  rubyforge_project:
141
- rubygems_version: 2.6.11
162
+ rubygems_version: 2.5.2.3
142
163
  signing_key:
143
164
  specification_version: 4
144
165
  summary: Nokogiri locator engine for Watir