watigiri 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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