sparkling_watir 0.0.1 → 0.0.3
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 +6 -0
- data/Gemfile +1 -1
- data/README.md +16 -2
- data/Rakefile +10 -0
- data/lib/sparkling_watir/element.rb +19 -2
- data/lib/sparkling_watir/gestures.rb +72 -0
- data/lib/sparkling_watir/wait/timer.rb +53 -0
- data/lib/sparkling_watir/wait.rb +150 -0
- data/lib/sparkling_watir.rb +29 -26
- data/sparkling_watir.gemspec +7 -5
- metadata +41 -16
- data/.idea/.gitignore +0 -8
- data/.idea/misc.xml +0 -4
- data/.idea/modules.xml +0 -8
- data/.idea/sparkling_watir.iml +0 -25
- data/.idea/vcs.xml +0 -6
- data/Gemfile.lock +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb95d81bc23cf2938bd4b20fa4cb06e18b7b104f4a2db9477f0e5d4b822577d0
|
4
|
+
data.tar.gz: dd4d2c67b98376c94707109e38d26e938f4af779e5f92e1752b77cc7d97e78c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b7d5973211467df06ede87056ad6269359c7e0fbc420831ef956a27eb28050e0dd208ad4b35b628e38a127c24840f35a359a0fb74c2c83a22e5a684847094d9
|
7
|
+
data.tar.gz: 8aed1b54a5c1b2815abe4e77af649aff96efdadd217bee16869f68f9b4e4c63821759dbb1bacf550307ded1d52debd3fa34e46105c6ec4d0283a9dd800cca269
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
# SparklingWatir
|
2
2
|
|
3
3
|
Watir for testing your Mobile Devices. Powered by Appium.
|
4
|
-
This project is a revamp of Tap watir
|
4
|
+
This project is a revamp of [Tap watir](https://github.com/watir/tap_watir).
|
5
5
|
|
6
|
-
All the inspiration from this project is
|
6
|
+
All the inspiration from this project is taken from Tap Watir, so all the credit goes
|
7
7
|
to the original creators and contributors
|
8
8
|
|
9
|
+
If you don't know the watir project here is the [link to the project](http://watir.com/)
|
10
|
+
|
11
|
+
This project is still in an alpha stage and under active development.
|
12
|
+
|
9
13
|
## Installation
|
10
14
|
|
11
15
|
Add this line to your application's Gemfile:
|
@@ -22,6 +26,16 @@ Or install it yourself as:
|
|
22
26
|
|
23
27
|
$ gem install sparkling_watir
|
24
28
|
|
29
|
+
If you want to run the tests on iOS just create a simulator that is an iPhone 8 with os 15.5 or you can change
|
30
|
+
the capabilities in spec/config/caps and you can download the testing app [here](https://github.com/cloudgrey-io/the-app/releases/tag/v1.10.0)
|
31
|
+
|
32
|
+
All the credit for the testing app goes to Jonathan Lipps.
|
33
|
+
|
34
|
+
If you want to switch between android and iOS capabilties just run:
|
35
|
+
|
36
|
+
$ rake platform[android] or rake platform[ios]
|
37
|
+
|
38
|
+
|
25
39
|
## License
|
26
40
|
|
27
41
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
desc 'Changes the default platform'
|
6
|
+
task :platform, [:platform] do |_t, args|
|
7
|
+
config = YAML.load_file('./spec/config/caps.yml')
|
8
|
+
config['default_platform'] = args.platform
|
9
|
+
File.open('./spec/config/caps.yml', 'w') { |file| YAML.dump(config, file) }
|
10
|
+
end
|
@@ -1,11 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'gestures'
|
4
|
+
require_relative 'wait'
|
4
5
|
|
6
|
+
module SparklingWatir
|
5
7
|
#
|
6
8
|
# This is a element in the native app context
|
7
9
|
#
|
8
10
|
class Element
|
11
|
+
include Gestures
|
12
|
+
include Waitable
|
13
|
+
|
9
14
|
def initialize(driver, selector)
|
10
15
|
@driver = driver
|
11
16
|
@selector = selector
|
@@ -21,6 +26,7 @@ module SparklingWatir
|
|
21
26
|
rescue Watir::Exception::UnknownObjectException
|
22
27
|
false
|
23
28
|
end
|
29
|
+
|
24
30
|
alias exist? exists?
|
25
31
|
|
26
32
|
def present?
|
@@ -29,6 +35,7 @@ module SparklingWatir
|
|
29
35
|
rescue Watir::Exception::UnknownObjectException
|
30
36
|
false
|
31
37
|
end
|
38
|
+
|
32
39
|
alias visible? present?
|
33
40
|
|
34
41
|
def enabled?
|
@@ -39,16 +46,26 @@ module SparklingWatir
|
|
39
46
|
end
|
40
47
|
|
41
48
|
def coordinates
|
49
|
+
assert_exists
|
42
50
|
@element.location
|
43
51
|
end
|
52
|
+
|
44
53
|
alias location coordinates
|
45
54
|
|
46
55
|
def size
|
56
|
+
assert_exists
|
47
57
|
@element.size
|
48
58
|
end
|
49
59
|
|
50
60
|
def bounds
|
51
|
-
{x: coordinates.x + size.width, y: coordinates.y + size.height}
|
61
|
+
{ x: coordinates.x + size.width, y: coordinates.y + size.height }
|
62
|
+
end
|
63
|
+
|
64
|
+
def center
|
65
|
+
{
|
66
|
+
x: coordinates[:x] + size.width / 2,
|
67
|
+
y: coordinates[:y] + size.height / 2
|
68
|
+
}
|
52
69
|
end
|
53
70
|
|
54
71
|
private
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'appium_lib_core/common/touch_action/touch_actions'
|
4
|
+
require 'selenium/webdriver/common/interactions/interactions'
|
5
|
+
|
6
|
+
module SparklingWatir
|
7
|
+
# This module handles all the possible gestures
|
8
|
+
module Gestures
|
9
|
+
VIEWPORT = ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT
|
10
|
+
|
11
|
+
def action(kind, name)
|
12
|
+
@driver.action.add_pointer_input(kind, name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def perform(*actions)
|
16
|
+
@driver.perform_actions actions
|
17
|
+
end
|
18
|
+
|
19
|
+
def tap(timeout = nil)
|
20
|
+
wait_until(timeout: timeout, &:present?)
|
21
|
+
tap = action(:touch, 'tap')
|
22
|
+
tap.create_pointer_move(duration: 0.1, x: center[:x], y: center[:y], origin: VIEWPORT)
|
23
|
+
tap.create_pointer_down(:left)
|
24
|
+
tap.create_pointer_up(:left)
|
25
|
+
perform tap
|
26
|
+
end
|
27
|
+
|
28
|
+
alias press tap
|
29
|
+
|
30
|
+
def double_tap
|
31
|
+
wait_until(&:present?)
|
32
|
+
double_tap = action(:touch, 'double_tap')
|
33
|
+
tap.create_pointer_move(duration: 0.1, x: center[:x], y: center[:y], origin: VIEWPORT)
|
34
|
+
double_tap.create_pointer_down(:left)
|
35
|
+
double_tap.create_pointer_up(:left)
|
36
|
+
double_tap.create_pointer_down(:left)
|
37
|
+
double_tap.create_pointer_up(:left)
|
38
|
+
|
39
|
+
perform double_tap
|
40
|
+
end
|
41
|
+
|
42
|
+
def swipe(opts = {})
|
43
|
+
wait_until(&:present?)
|
44
|
+
start_coordinates = self.center
|
45
|
+
end_coordinates = select_direction(opts[:to].wait_until(&:exists?).center[:x], opts[:to].wait_until(&:exists?).center[:y], opts[:direction])
|
46
|
+
duration = opts[:duration] || 1
|
47
|
+
execute_swipe(duration, start_coordinates, end_coordinates)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def execute_swipe(duration, start_coordinates, end_coordinates)
|
53
|
+
finger = action(:touch, 'swipe')
|
54
|
+
finger.create_pointer_move(duration: duration, x: start_coordinates[:x], y: start_coordinates[:y],
|
55
|
+
origin: VIEWPORT)
|
56
|
+
finger.create_pointer_down(:left)
|
57
|
+
finger.create_pointer_move(duration: duration, x: end_coordinates[:x], y: end_coordinates[:y],
|
58
|
+
origin: VIEWPORT)
|
59
|
+
finger.create_pointer_up(:left)
|
60
|
+
perform finger
|
61
|
+
end
|
62
|
+
|
63
|
+
def select_direction(x, y, direction)
|
64
|
+
case direction
|
65
|
+
when :down then { x: x, y: - y } # For swipe down, increase y-coordinate
|
66
|
+
when :up then { x: x, y: y * 20 } # For swipe up, decrease y-coordinate
|
67
|
+
when :left, :right then { x: x, y: y }
|
68
|
+
else raise "You selected an invalid direction. The valid directions are: :down, :up, :left, :right"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SparklingWatir
|
4
|
+
module Wait
|
5
|
+
# This class provides the time use on waits
|
6
|
+
class Timer
|
7
|
+
def initialize(timeout: nil)
|
8
|
+
@end_time = timeout ? current_time + timeout : nil
|
9
|
+
@remaining_time = @end_time - current_time if @end_time
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# Executes given block until it returns true or exceeds timeout.
|
14
|
+
# @param [Integer] timeout
|
15
|
+
# @yield block
|
16
|
+
# @api private
|
17
|
+
#
|
18
|
+
|
19
|
+
def wait(timeout, &block)
|
20
|
+
end_time = @end_time || current_time + timeout
|
21
|
+
loop do
|
22
|
+
yield(block)
|
23
|
+
@remaining_time = end_time - current_time
|
24
|
+
break if @remaining_time.negative?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def remaining_time
|
29
|
+
@end_time - current_time
|
30
|
+
end
|
31
|
+
|
32
|
+
def reset!
|
33
|
+
@end_time = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def locked?
|
37
|
+
!@end_time.nil?
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
if defined?(Process::CLOCK_MONOTONIC)
|
43
|
+
def current_time
|
44
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
def current_time
|
48
|
+
::Time.now.to_f
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'wait/timer'
|
4
|
+
|
5
|
+
module SparklingWatir
|
6
|
+
# This module is in charge of handling all the waits
|
7
|
+
module Wait
|
8
|
+
class TimeoutError < StandardError; end
|
9
|
+
|
10
|
+
INTERVAL = 0.1
|
11
|
+
|
12
|
+
class << self
|
13
|
+
#
|
14
|
+
# @!attribute timer
|
15
|
+
# Access TapWatir timer implementation in use.
|
16
|
+
# @see Timer
|
17
|
+
# @return [#wait]
|
18
|
+
#
|
19
|
+
|
20
|
+
attr_writer :timer
|
21
|
+
|
22
|
+
def timer
|
23
|
+
@timer ||= Timer.new
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Waits until the block evaluates to true or times out.
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# TODO: Add examples
|
31
|
+
#
|
32
|
+
# @param [Integer] timeout How long to wait in seconds
|
33
|
+
# @param [String] message Message to raise if timeout is exceeded
|
34
|
+
# @param [Object, NilClass] object Object to evaluate block against
|
35
|
+
# @raise [TimeoutError] if timeout is exceeded
|
36
|
+
#
|
37
|
+
|
38
|
+
def until(timeout: nil, message: nil, interval: nil, object: nil)
|
39
|
+
timeout ||= Watir.default_timeout
|
40
|
+
run_with_timer(timeout, interval) do
|
41
|
+
result = yield(object)
|
42
|
+
return result if result
|
43
|
+
end
|
44
|
+
raise TimeoutError, message_for(timeout, object, message)
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Wait while the block evaluates to true or times out.
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# TODO: Add examples
|
52
|
+
#
|
53
|
+
# @param [Integer] timeout How long to wait in seconds
|
54
|
+
# @param [String] message Message to raise if timeout is exceeded
|
55
|
+
# @param [Object, NilClass] object Object to evaluate block against
|
56
|
+
# @raise [TimeoutError] if timeout is exceeded
|
57
|
+
#
|
58
|
+
|
59
|
+
def while(timeout: nil, message: nil, interval: nil, object: nil)
|
60
|
+
timeout ||= Watir.default_timeout
|
61
|
+
run_with_timer(timeout, interval) { return unless yield(object) }
|
62
|
+
raise TimeoutError, message_for(timeout, object, message)
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def message_for(timeout, object, message)
|
68
|
+
message = message.call(object) if message.is_a?(Proc)
|
69
|
+
err = "timed out after #{timeout} seconds"
|
70
|
+
err << ", #{message}" if message
|
71
|
+
|
72
|
+
err
|
73
|
+
end
|
74
|
+
|
75
|
+
def run_with_timer(timeout, interval)
|
76
|
+
if timeout.zero?
|
77
|
+
yield
|
78
|
+
else
|
79
|
+
timer.wait(timeout) do
|
80
|
+
yield
|
81
|
+
sleep interval || INTERVAL
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# THis module provides wait utility methods
|
89
|
+
module Waitable
|
90
|
+
#
|
91
|
+
# Waits until the condition is true.
|
92
|
+
#
|
93
|
+
# @example
|
94
|
+
# TODO: Add examples
|
95
|
+
#
|
96
|
+
|
97
|
+
def wait_until(timeout: nil, message: nil, interval: nil, **opt, &blk)
|
98
|
+
message ||= proc { |obj| "waiting for true condition on #{obj.inspect}" }
|
99
|
+
|
100
|
+
# TODO: Consider throwing argument error for mixing block & options
|
101
|
+
proc = create_proc(opt, &blk)
|
102
|
+
|
103
|
+
Wait.until(timeout: timeout, message: message, interval: interval, object: self, &proc)
|
104
|
+
|
105
|
+
self
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# @example
|
110
|
+
# Add examples
|
111
|
+
#
|
112
|
+
def wait_while(timeout: nil, message: nil, interval: nil, **opt, &blk)
|
113
|
+
message ||= proc { |obj| "waiting for false condition on #{obj.inspect}" }
|
114
|
+
|
115
|
+
# TODO: Add examples
|
116
|
+
proc = create_proc(opt, &blk)
|
117
|
+
|
118
|
+
Wait.while(timeout: timeout, message: message, interval: interval, object: self, &proc)
|
119
|
+
|
120
|
+
self
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
def create_proc(opt)
|
126
|
+
proc do
|
127
|
+
reset! if opt.delete(:element_reset) && is_a?(Element)
|
128
|
+
(opt.empty? || match_attributes(opt).call) && (!block_given? || yield(self))
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def match_attributes(opt)
|
133
|
+
proc do
|
134
|
+
opt.keys.all? do |key|
|
135
|
+
expected = opt[key]
|
136
|
+
actual = is_a?(Element) && !respond_to?(key) ? attribute_value(key) : send(key)
|
137
|
+
compare_attributes(actual, expected)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def compare_attributes(actual, expected)
|
143
|
+
case expected
|
144
|
+
when Regexp then expected =~ actual
|
145
|
+
when Numeric then expected == actual
|
146
|
+
else expected.to_s == actual
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
data/lib/sparkling_watir.rb
CHANGED
@@ -1,37 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'appium_lib_core'
|
2
4
|
require 'watir'
|
3
5
|
|
4
6
|
module SparklingWatir
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def initialize(opts)
|
12
|
-
url = opts[:caps].delete(:url)
|
13
|
-
@driver = Appium::Core::Driver.for(opts).start_driver(server_url: url)
|
14
|
-
end
|
7
|
+
#
|
8
|
+
# For driving a native application or a native app context
|
9
|
+
#
|
10
|
+
class App
|
11
|
+
attr_accessor :driver
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
def initialize(opts)
|
14
|
+
url = opts[:caps]
|
15
|
+
@driver = Appium::Core::Driver.for(opts).start_driver(server_url: 'http://localhost:4723/wd/hub')
|
16
|
+
end
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
def quit
|
19
|
+
driver.quit
|
20
|
+
end
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
22
|
+
alias close quit
|
23
|
+
|
24
|
+
def element(selector)
|
25
|
+
Element.new(driver, selector)
|
26
|
+
end
|
32
27
|
|
33
|
-
|
34
|
-
|
28
|
+
def method_missing(method_name, *arguments, &block)
|
29
|
+
if driver.respond_to? method_name
|
30
|
+
driver.send method_name, *arguments, &block
|
31
|
+
else
|
32
|
+
super
|
35
33
|
end
|
36
34
|
end
|
35
|
+
|
36
|
+
def respond_to_missing?(method_name, include_private = false)
|
37
|
+
driver.respond_to?(method_name) || super
|
38
|
+
end
|
39
|
+
end
|
37
40
|
end
|
data/sparkling_watir.gemspec
CHANGED
@@ -5,12 +5,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'sparkling_watir'
|
8
|
-
spec.version = '0.0.
|
8
|
+
spec.version = '0.0.3'
|
9
9
|
spec.authors = ['Agustin Pequeno']
|
10
10
|
spec.email = ['agustin.pe94@gmail.com']
|
11
11
|
|
12
12
|
spec.summary = 'A watir adaptation for testing your native mobile apps'
|
13
|
-
spec.description = 'Sparkling watir takes heavy inspiration from tap watir and
|
13
|
+
spec.description = 'Sparkling watir takes heavy inspiration from tap watir and is a mobile adaptation of watir'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
# Specify which files should be added to the gem when it is released.
|
@@ -22,11 +22,13 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
spec.required_ruby_version = '>= 2.7.0'
|
24
24
|
|
25
|
-
spec.add_development_dependency 'bundler', '~> 2.
|
25
|
+
spec.add_development_dependency 'bundler', '~> 2.4.14'
|
26
26
|
spec.add_development_dependency 'rake', '~> 13.0.6'
|
27
27
|
spec.add_development_dependency 'rspec', '~> 3.11.0'
|
28
|
-
spec.add_development_dependency 'rubocop', '~>
|
28
|
+
spec.add_development_dependency 'rubocop', '~> 1.27'
|
29
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.15.0'
|
30
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.9.0'
|
29
31
|
|
30
|
-
spec.add_dependency 'appium_lib_core', '~>
|
32
|
+
spec.add_dependency 'appium_lib_core', '~>7.0.0 '
|
31
33
|
spec.add_dependency 'watir', '~> 7.1.0'
|
32
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparkling_watir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Agustin Pequeno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.4.14
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.4.14
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,28 +58,56 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.27'
|
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: '1.27'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-performance
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.15.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.15.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.9.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.9.0
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: appium_lib_core
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
101
|
- - "~>"
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
103
|
+
version: 7.0.0
|
76
104
|
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
110
|
+
version: 7.0.0
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: watir
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,8 +122,8 @@ dependencies:
|
|
94
122
|
- - "~>"
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: 7.1.0
|
97
|
-
description: Sparkling watir takes heavy inspiration from tap watir and
|
98
|
-
|
125
|
+
description: Sparkling watir takes heavy inspiration from tap watir and is a mobile
|
126
|
+
adaptation of watir
|
99
127
|
email:
|
100
128
|
- agustin.pe94@gmail.com
|
101
129
|
executables: []
|
@@ -103,18 +131,15 @@ extensions: []
|
|
103
131
|
extra_rdoc_files: []
|
104
132
|
files:
|
105
133
|
- ".gitignore"
|
106
|
-
- ".idea/.gitignore"
|
107
|
-
- ".idea/misc.xml"
|
108
|
-
- ".idea/modules.xml"
|
109
|
-
- ".idea/sparkling_watir.iml"
|
110
|
-
- ".idea/vcs.xml"
|
111
134
|
- ".rubocop.yml"
|
112
135
|
- Gemfile
|
113
|
-
- Gemfile.lock
|
114
136
|
- README.md
|
115
137
|
- Rakefile
|
116
138
|
- lib/sparkling_watir.rb
|
117
139
|
- lib/sparkling_watir/element.rb
|
140
|
+
- lib/sparkling_watir/gestures.rb
|
141
|
+
- lib/sparkling_watir/wait.rb
|
142
|
+
- lib/sparkling_watir/wait/timer.rb
|
118
143
|
- sparkling_watir.gemspec
|
119
144
|
homepage:
|
120
145
|
licenses:
|
data/.idea/.gitignore
DELETED
data/.idea/misc.xml
DELETED
data/.idea/modules.xml
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="ProjectModuleManager">
|
4
|
-
<modules>
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/sparkling_watir.iml" filepath="$PROJECT_DIR$/.idea/sparkling_watir.iml" />
|
6
|
-
</modules>
|
7
|
-
</component>
|
8
|
-
</project>
|
data/.idea/sparkling_watir.iml
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
3
|
-
<component name="ModuleRunConfigurationManager">
|
4
|
-
<shared />
|
5
|
-
</component>
|
6
|
-
<component name="NewModuleRootManager">
|
7
|
-
<content url="file://$MODULE_DIR$">
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
9
|
-
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
10
|
-
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
11
|
-
</content>
|
12
|
-
<orderEntry type="inheritedJdk" />
|
13
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.3.17, RVM: ruby-3.1.0) [gem]" level="application" />
|
15
|
-
<orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, RVM: ruby-3.1.0) [gem]" level="application" />
|
16
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.11.0, RVM: ruby-3.1.0) [gem]" level="application" />
|
17
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop (v0.93.1, RVM: ruby-3.1.0) [gem]" level="application" />
|
18
|
-
<orderEntry type="library" scope="PROVIDED" name="watir (v7.1.0, RVM: ruby-3.1.0) [gem]" level="application" />
|
19
|
-
</component>
|
20
|
-
<component name="RakeTasksCache">
|
21
|
-
<option name="myRootTask">
|
22
|
-
<RakeTaskImpl id="rake" />
|
23
|
-
</option>
|
24
|
-
</component>
|
25
|
-
</module>
|
data/.idea/vcs.xml
DELETED
data/Gemfile.lock
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
sparkling_watir (0.0.1)
|
5
|
-
appium_lib_core (~> 5.3.0)
|
6
|
-
watir (~> 7.1.0)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
appium_lib_core (5.3.0)
|
12
|
-
faye-websocket (~> 0.11.0)
|
13
|
-
selenium-webdriver (~> 4.2, < 4.5)
|
14
|
-
ast (2.4.2)
|
15
|
-
childprocess (4.1.0)
|
16
|
-
diff-lcs (1.5.0)
|
17
|
-
eventmachine (1.2.7)
|
18
|
-
faye-websocket (0.11.1)
|
19
|
-
eventmachine (>= 0.12.0)
|
20
|
-
websocket-driver (>= 0.5.1)
|
21
|
-
parallel (1.22.1)
|
22
|
-
parser (3.1.2.1)
|
23
|
-
ast (~> 2.4.1)
|
24
|
-
rainbow (3.1.1)
|
25
|
-
rake (13.0.6)
|
26
|
-
regexp_parser (2.5.0)
|
27
|
-
rexml (3.2.5)
|
28
|
-
rspec (3.11.0)
|
29
|
-
rspec-core (~> 3.11.0)
|
30
|
-
rspec-expectations (~> 3.11.0)
|
31
|
-
rspec-mocks (~> 3.11.0)
|
32
|
-
rspec-core (3.11.0)
|
33
|
-
rspec-support (~> 3.11.0)
|
34
|
-
rspec-expectations (3.11.0)
|
35
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
-
rspec-support (~> 3.11.0)
|
37
|
-
rspec-mocks (3.11.1)
|
38
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
-
rspec-support (~> 3.11.0)
|
40
|
-
rspec-support (3.11.0)
|
41
|
-
rubocop (0.93.1)
|
42
|
-
parallel (~> 1.10)
|
43
|
-
parser (>= 2.7.1.5)
|
44
|
-
rainbow (>= 2.2.2, < 4.0)
|
45
|
-
regexp_parser (>= 1.8)
|
46
|
-
rexml
|
47
|
-
rubocop-ast (>= 0.6.0)
|
48
|
-
ruby-progressbar (~> 1.7)
|
49
|
-
unicode-display_width (>= 1.4.0, < 2.0)
|
50
|
-
rubocop-ast (1.21.0)
|
51
|
-
parser (>= 3.1.1.0)
|
52
|
-
ruby-progressbar (1.11.0)
|
53
|
-
rubyzip (2.3.2)
|
54
|
-
selenium-webdriver (4.4.0)
|
55
|
-
childprocess (>= 0.5, < 5.0)
|
56
|
-
rexml (~> 3.2, >= 3.2.5)
|
57
|
-
rubyzip (>= 1.2.2, < 3.0)
|
58
|
-
websocket (~> 1.0)
|
59
|
-
unicode-display_width (1.8.0)
|
60
|
-
watir (7.1.0)
|
61
|
-
regexp_parser (>= 1.2, < 3)
|
62
|
-
selenium-webdriver (~> 4.0)
|
63
|
-
websocket (1.2.9)
|
64
|
-
websocket-driver (0.7.5)
|
65
|
-
websocket-extensions (>= 0.1.0)
|
66
|
-
websocket-extensions (0.1.5)
|
67
|
-
|
68
|
-
PLATFORMS
|
69
|
-
arm64-darwin-21
|
70
|
-
|
71
|
-
DEPENDENCIES
|
72
|
-
bundler (~> 2.3.17)
|
73
|
-
rake (~> 13.0.6)
|
74
|
-
rspec (~> 3.11.0)
|
75
|
-
rubocop (~> 0.50)
|
76
|
-
sparkling_watir!
|
77
|
-
|
78
|
-
BUNDLED WITH
|
79
|
-
2.3.17
|