sparkling_watir 0.0.1 → 0.0.3

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
  SHA256:
3
- metadata.gz: 8be8569b5d465e5b41cb77eebbab26537fdb755db47a0e486245e236535123fb
4
- data.tar.gz: 2b5d78461d1c67bb27a01137f6cb549cac39265c675e88e6690fc66e56cfd390
3
+ metadata.gz: cb95d81bc23cf2938bd4b20fa4cb06e18b7b104f4a2db9477f0e5d4b822577d0
4
+ data.tar.gz: dd4d2c67b98376c94707109e38d26e938f4af779e5f92e1752b77cc7d97e78c7
5
5
  SHA512:
6
- metadata.gz: d9c368c193abb1b26507a8598ce60afb25a7de718e9325c0e5cb2254169ce7a5cf9cc5582fa2b9a67236cc29da60a1bc516bdf4a89a267c0b37318a99288a0f3
7
- data.tar.gz: c2e9f30535754c03a862274c6360d8b76a13b5a139b3d32baf5eb65663615796d871d8d859b3b7c305e713002d2b31f0e390b458e28f7db668612a18fe6ffbe7
6
+ metadata.gz: 3b7d5973211467df06ede87056ad6269359c7e0fbc420831ef956a27eb28050e0dd208ad4b35b628e38a127c24840f35a359a0fb74c2c83a22e5a684847094d9
7
+ data.tar.gz: 8aed1b54a5c1b2815abe4e77af649aff96efdadd217bee16869f68f9b4e4c63821759dbb1bacf550307ded1d52debd3fa34e46105c6ec4d0283a9dd800cca269
data/.rubocop.yml CHANGED
@@ -0,0 +1,6 @@
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-performance
4
+
5
+ Metrics/BlockLength:
6
+ Max: 150
data/Gemfile CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- gemspec
5
+ gemspec
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 https://github.com/watir/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 taking from Tap Watir, so all the credit goes
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
- module SparklingWatir
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
@@ -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
- # For driving a native application or a native app context
7
- #
8
- class App
9
- attr_accessor :driver
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
- def quit
17
- @driver.quit
18
- end
19
- alias close quit
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
- def element(selector)
22
- Element.new(driver, selector)
23
- end
18
+ def quit
19
+ driver.quit
20
+ end
24
21
 
25
- def method_missing(method_name, *arguments, &block)
26
- if driver.respond_to? method_name
27
- driver.send method_name, *arguments, &block
28
- else
29
- super
30
- end
31
- end
22
+ alias close quit
23
+
24
+ def element(selector)
25
+ Element.new(driver, selector)
26
+ end
32
27
 
33
- def respond_to_missing?(method_name, include_private = false)
34
- driver.respond_to?(method_name) || super
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
@@ -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.1'
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 tries to provide a mobile adaptation of watir'
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.3.17'
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', '~> 0.50'
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', '~>5.3.0 '
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.1
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: 2022-08-11 00:00:00.000000000 Z
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.3.17
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.3.17
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: '0.50'
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: '0.50'
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: 5.3.0
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: 5.3.0
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 tries to provide
98
- a mobile adaptation of watir
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
@@ -1,8 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Datasource local storage ignored files
7
- /dataSources/
8
- /dataSources.local.xml
data/.idea/misc.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-3.1.0" project-jdk-type="RUBY_SDK" />
4
- </project>
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>
@@ -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
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
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