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 +4 -4
- data/.rubocop.yml +39 -0
- data/.travis.yml +9 -2
- data/Gemfile +2 -2
- data/Rakefile +7 -2
- data/lib/extensions/watir/browser.rb +3 -1
- data/lib/extensions/watir/element.rb +1 -4
- data/lib/extensions/watir/iframe.rb +1 -4
- data/lib/watigiri/locators/element/locator.rb +30 -23
- data/lib/watigiri.rb +0 -8
- data/watigiri.gemspec +20 -20
- metadata +33 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9ab5b03da6791a3ea140287be1c54da77467dc2a
|
|
4
|
+
data.tar.gz: 3a97f2c0b646ceec77ee95a228b9e5211906fe77
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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:
|
|
1
|
+
sudo: required
|
|
2
2
|
language: ruby
|
|
3
3
|
rvm:
|
|
4
|
-
- 2.
|
|
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
|
|
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
|
|
2
|
-
require
|
|
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,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
|
-
|
|
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
|
-
|
|
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
|
-
@
|
|
19
|
+
return super unless @nokogiri || regex?
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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 ||
|
|
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
|
-
|
|
54
|
-
return
|
|
55
|
-
|
|
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
|
-
|
|
59
|
+
element.attribute('href')&.to_s
|
|
63
60
|
else
|
|
64
|
-
element.attribute(how.to_s.tr(
|
|
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
|
-
[
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
7
|
-
spec.version =
|
|
8
|
-
spec.authors = [
|
|
9
|
-
spec.email = [
|
|
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 =
|
|
12
|
-
spec.description =
|
|
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 =
|
|
17
|
-
spec.license =
|
|
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 =
|
|
21
|
+
spec.bindir = 'exe'
|
|
23
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
24
|
-
spec.require_paths = [
|
|
23
|
+
spec.require_paths = ['lib']
|
|
25
24
|
|
|
26
|
-
spec.add_development_dependency
|
|
27
|
-
spec.add_development_dependency
|
|
28
|
-
spec.add_development_dependency
|
|
29
|
-
spec.add_development_dependency
|
|
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
|
|
32
|
-
spec.add_runtime_dependency
|
|
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
|
+
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-
|
|
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:
|
|
56
|
+
name: rubocop
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
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: '
|
|
68
|
+
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: webdrivers
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
76
|
-
|
|
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: '
|
|
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.
|
|
162
|
+
rubygems_version: 2.5.2.3
|
|
142
163
|
signing_key:
|
|
143
164
|
specification_version: 4
|
|
144
165
|
summary: Nokogiri locator engine for Watir
|