testa_appium_driver 0.1.11 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +23 -0
  3. data/.gitignore +16 -16
  4. data/.rspec +3 -3
  5. data/.rubocop.yml +13 -13
  6. data/CHANGELOG.md +5 -5
  7. data/CODE_OF_CONDUCT.md +102 -102
  8. data/Gemfile +12 -12
  9. data/Gemfile.lock +74 -0
  10. data/LICENSE.txt +21 -21
  11. data/README.md +402 -378
  12. data/Rakefile +12 -12
  13. data/{testa_appium_driver.iml → appium-driver.iml} +71 -78
  14. data/bin/console +17 -17
  15. data/bin/setup +8 -8
  16. data/lib/testa_appium_driver/android/class_selectors.rb +437 -437
  17. data/lib/testa_appium_driver/android/driver.rb +70 -69
  18. data/lib/testa_appium_driver/android/locator/attributes.rb +117 -113
  19. data/lib/testa_appium_driver/android/locator.rb +141 -141
  20. data/lib/testa_appium_driver/android/scroll_actions/uiautomator_scroll_actions.rb +61 -61
  21. data/lib/testa_appium_driver/android/selenium_element.rb +11 -7
  22. data/lib/testa_appium_driver/common/bounds.rb +149 -149
  23. data/lib/testa_appium_driver/common/constants.rb +37 -36
  24. data/lib/testa_appium_driver/common/exceptions/strategy_mix_exception.rb +11 -11
  25. data/lib/testa_appium_driver/common/helpers.rb +270 -270
  26. data/lib/testa_appium_driver/common/locator/scroll_actions.rb +397 -397
  27. data/lib/testa_appium_driver/common/locator.rb +627 -610
  28. data/lib/testa_appium_driver/common/scroll_actions/json_wire_scroll_actions.rb +3 -3
  29. data/lib/testa_appium_driver/common/scroll_actions/w3c_scroll_actions.rb +304 -237
  30. data/lib/testa_appium_driver/common/scroll_actions.rb +253 -246
  31. data/lib/testa_appium_driver/common/selenium_element.rb +19 -19
  32. data/lib/testa_appium_driver/driver.rb +328 -312
  33. data/lib/testa_appium_driver/ios/driver.rb +48 -48
  34. data/lib/testa_appium_driver/ios/locator/attributes.rb +84 -80
  35. data/lib/testa_appium_driver/ios/locator.rb +71 -70
  36. data/lib/testa_appium_driver/ios/selenium_element.rb +6 -6
  37. data/lib/testa_appium_driver/ios/type_selectors.rb +187 -187
  38. data/lib/testa_appium_driver/version.rb +5 -5
  39. data/lib/testa_appium_driver.rb +6 -6
  40. data/testa_appium_driver.gemspec +41 -41
  41. metadata +9 -16
  42. data/.idea/deployment.xml +0 -22
  43. data/.idea/inspectionProfiles/Project_Default.xml +0 -9
  44. data/.idea/misc.xml +0 -6
  45. data/.idea/modules.xml +0 -8
  46. data/.idea/runConfigurations/Android_Test.xml +0 -42
  47. data/.idea/runConfigurations.xml +0 -10
  48. data/.idea/sshConfigs.xml +0 -13
  49. data/.idea/vcs.xml +0 -6
  50. data/.idea/webServers.xml +0 -21
@@ -1,49 +1,49 @@
1
- require_relative 'type_selectors'
2
- require_relative 'locator'
3
- require_relative 'selenium_element'
4
-
5
- module TestaAppiumDriver
6
- class Driver
7
- include TypeSelectors
8
-
9
-
10
-
11
- # @param params [Hash]
12
- # @return [TestaAppiumDriver::Locator] first scrollable element
13
- def scrollable(params = {})
14
- scroll_view(params)
15
- end
16
-
17
- # @param params [Hash]
18
- # @return [TestaAppiumDriver::Locator] first scrollable element
19
- def scrollables(params = {})
20
- scroll_views(params)
21
- end
22
-
23
- private
24
- def handle_testa_opts
25
- if @testa_opts[:default_find_strategy].nil?
26
- @default_find_strategy = DEFAULT_IOS_FIND_STRATEGY
27
- else
28
- case @testa_opts[:default_find_strategy].to_sym
29
- when FIND_STRATEGY_XPATH
30
- @default_find_strategy = @testa_opts[:default_find_strategy].to_sym
31
- else
32
- raise "Default find strategy #{@testa_opts[:default_find_strategy]} not supported for iOS"
33
- end
34
- end
35
-
36
-
37
- if @testa_opts[:default_scroll_strategy].nil?
38
- @default_scroll_strategy = DEFAULT_IOS_SCROLL_STRATEGY
39
- else
40
- case @testa_opts[:default_scroll_strategy].to_sym
41
- when SCROLL_STRATEGY_W3C
42
- @default_scroll_strategy = @testa_opts[:default_scroll_strategy].to_sym
43
- else
44
- raise "Default scroll strategy #{@testa_opts[:default_scroll_strategy]} not supported for iOS"
45
- end
46
- end
47
- end
48
- end
1
+ require_relative 'type_selectors'
2
+ require_relative 'locator'
3
+ require_relative 'selenium_element'
4
+
5
+ module TestaAppiumDriver
6
+ class Driver
7
+ include TypeSelectors
8
+
9
+
10
+
11
+ # @param params [Hash]
12
+ # @return [TestaAppiumDriver::Locator] first scrollable element
13
+ def scrollable(params = {})
14
+ scroll_view(params)
15
+ end
16
+
17
+ # @param params [Hash]
18
+ # @return [TestaAppiumDriver::Locator] first scrollable element
19
+ def scrollables(params = {})
20
+ scroll_views(params)
21
+ end
22
+
23
+ private
24
+ def handle_testa_opts
25
+ if @testa_opts[:default_find_strategy].nil?
26
+ @default_find_strategy = DEFAULT_IOS_FIND_STRATEGY
27
+ else
28
+ case @testa_opts[:default_find_strategy].to_sym
29
+ when FIND_STRATEGY_XPATH
30
+ @default_find_strategy = @testa_opts[:default_find_strategy].to_sym
31
+ else
32
+ raise "Default find strategy #{@testa_opts[:default_find_strategy]} not supported for iOS"
33
+ end
34
+ end
35
+
36
+
37
+ if @testa_opts[:default_scroll_strategy].nil?
38
+ @default_scroll_strategy = DEFAULT_IOS_SCROLL_STRATEGY
39
+ else
40
+ case @testa_opts[:default_scroll_strategy].to_sym
41
+ when SCROLL_STRATEGY_W3C
42
+ @default_scroll_strategy = @testa_opts[:default_scroll_strategy].to_sym
43
+ else
44
+ raise "Default scroll strategy #{@testa_opts[:default_scroll_strategy]} not supported for iOS"
45
+ end
46
+ end
47
+ end
48
+ end
49
49
  end
@@ -1,81 +1,85 @@
1
- module TestaAppiumDriver
2
- module Attributes
3
-
4
- #noinspection RubyNilAnalysis
5
- def attribute(name, *args)
6
- elements = execute(*args)
7
-
8
- if elements.instance_of?(Selenium::WebDriver::Element)
9
- r = elements.send(:attribute, name.to_s)
10
- r = TestaAppiumDriver::Bounds.from_ios(r, @driver) if name.to_s == "rect"
11
- else
12
- r = elements.map { |e| e.send(:attribute, name.to_s) }
13
- r.map! { |b| TestaAppiumDriver::Bounds.from_ios(b, @driver) } if name.to_s == "rect"
14
- end
15
- r
16
- end
17
-
18
-
19
- def accessibility_container(*args)
20
- attribute("accessibilityContainer", *args)
21
- end
22
-
23
- def accessible?(*args)
24
- attribute("accessible", *args).to_s == "true"
25
- end
26
-
27
-
28
- def class_name(*args)
29
- attribute("class", *args)
30
- end
31
-
32
- def enabled?(*args)
33
- attribute("enabled", *args).to_s == "true"
34
- end
35
-
36
- def frame(*args)
37
- attribute("frame", *args)
38
- end
39
-
40
- def index(*args)
41
- attribute("index", *args)
42
- end
43
-
44
- def label(*args)
45
- attribute("label", *args)
46
- end
47
-
48
- def name(*args)
49
- attribute("name", *args)
50
- end
51
-
52
-
53
- def rect(*args)
54
- attribute("rect", *args)
55
- end
56
-
57
- def selected?(*args)
58
- attribute("selected", *args).to_s == "true"
59
- end
60
-
61
- def type(*args)
62
- attribute("type", *args)
63
- end
64
-
65
- def value(*args)
66
- attribute("value", *args)
67
- end
68
-
69
- def visible?(*args)
70
- attribute("visible", *args).to_s == "true"
71
- end
72
-
73
-
74
- alias_method :bounds, :rect
75
- alias_method :text, :label
76
- end
77
- #noinspection RubyYardReturnMatch
78
- class Locator
79
- include TestaAppiumDriver::Attributes
80
- end
1
+ module TestaAppiumDriver
2
+ module Attributes
3
+
4
+ #noinspection RubyNilAnalysis
5
+ def testa_attribute(name, *args)
6
+
7
+ if self.instance_of?(::Selenium::WebDriver::Element) || self.instance_of?(::Appium::Core::Element)
8
+ @driver = get_driver
9
+ elements = self
10
+ else
11
+ elements = execute(*args)
12
+ end
13
+
14
+
15
+ if elements.instance_of?(::Selenium::WebDriver::Element) || elements.instance_of?(::Appium::Core::Element)
16
+ r = elements.send(:attribute, name.to_s)
17
+ r = TestaAppiumDriver::Bounds.from_ios(r, @driver) if name.to_s == "rect"
18
+ else
19
+ r = elements.map { |e| e.send(:attribute, name.to_s) }
20
+ r.map! { |b| TestaAppiumDriver::Bounds.from_ios(b, @driver) } if name.to_s == "rect"
21
+ end
22
+ r
23
+ end
24
+
25
+
26
+ def accessibility_container(*args)
27
+ testa_attribute("accessibilityContainer", *args)
28
+ end
29
+
30
+ def accessible?(*args)
31
+ testa_attribute("accessible", *args).to_s == "true"
32
+ end
33
+
34
+
35
+ def class_name(*args)
36
+ testa_attribute("class", *args)
37
+ end
38
+
39
+ def enabled?(*args)
40
+ testa_attribute("enabled", *args).to_s == "true"
41
+ end
42
+
43
+ def frame(*args)
44
+ testa_attribute("frame", *args)
45
+ end
46
+
47
+ def index(*args)
48
+ testa_attribute("index", *args)
49
+ end
50
+
51
+ def label(*args)
52
+ testa_attribute("label", *args)
53
+ end
54
+
55
+ def name(*args)
56
+ testa_attribute("name", *args)
57
+ end
58
+
59
+
60
+ def rect(*args)
61
+ testa_attribute("rect", *args)
62
+ end
63
+
64
+ def selected?(*args)
65
+ testa_attribute("selected", *args).to_s == "true"
66
+ end
67
+
68
+ def type(*args)
69
+ testa_attribute("type", *args)
70
+ end
71
+
72
+ def value(*args)
73
+ testa_attribute("value", *args)
74
+ end
75
+
76
+ def visible?(*args)
77
+ testa_attribute("visible", *args).to_s == "true"
78
+ end
79
+
80
+
81
+ alias_method :bounds, :rect
82
+ alias_method :text, :label
83
+ end
84
+
81
85
  end
@@ -1,71 +1,72 @@
1
- require_relative 'locator/attributes'
2
-
3
- module TestaAppiumDriver
4
- class Locator
5
- include TypeSelectors
6
- attr_accessor :class_chain_selector
7
-
8
- def init(params, selectors, single)
9
- if is_scrollable_selector?(selectors, single)
10
- @scroll_orientation = :vertical
11
-
12
- if !params[:top].nil? || !params[:bottom].nil? || !params[:right].nil? || !params[:left].nil?
13
- @scroll_deadzone = {}
14
- @scroll_deadzone[:top] = params[:top].to_f unless params[:top].nil?
15
- @scroll_deadzone[:bottom] = params[:bottom].to_f unless params[:bottom].nil?
16
- @scroll_deadzone[:right] = params[:right].to_f unless params[:right].nil?
17
- @scroll_deadzone[:left] = params[:left].to_f unless params[:left].nil?
18
- end
19
-
20
- params[:scrollable_locator] = self.dup
21
- end
22
-
23
- @class_chain_selector = hash_to_class_chain(selectors, single)
24
-
25
-
26
- @scrollable_locator = params[:scrollable_locator] if params[:scrollable_locator]
27
- end
28
-
29
-
30
- # @return [Array] returns 2 elements. The first is the resolved find element strategy and the second is the resolved selector
31
- def strategies_and_selectors
32
- ss = []
33
- if @can_use_id_strategy
34
- ss.push({"#{FIND_STRATEGY_NAME}": @can_use_id_strategy})
35
- end
36
- ss.push({"#{FIND_STRATEGY_CLASS_CHAIN}": @class_chain_selector}) if @strategy.nil? || @strategy == FIND_STRATEGY_CLASS_CHAIN
37
- ss.push({"#{FIND_STRATEGY_XPATH}": @xpath_selector}) if @strategy.nil? || @strategy == FIND_STRATEGY_XPATH
38
- ss.push({"#{FIND_STRATEGY_IMAGE}": @image_selector}) if @strategy == FIND_STRATEGY_IMAGE
39
- ss
40
- end
41
-
42
-
43
-
44
- # @return [Locator] new child locator element
45
- def add_child_selector(params)
46
- params, selectors = extract_selectors_from_params(params)
47
- single = params[:single]
48
- raise "Cannot add child selector to Array" if single && !@single
49
-
50
- locator = self.dup
51
- add_xpath_child_selectors(locator, selectors, single)
52
- if @strategy.nil? || @strategy == FIND_STRATEGY_CLASS_CHAIN
53
- add_class_chain_child_selectors(locator, selectors, single)
54
- end
55
-
56
- if is_scrollable_selector?(selectors, single)
57
- locator.scrollable_locator.scroll_orientation = :vertical
58
- locator.scrollable_locator = locator
59
- end
60
-
61
- locator.last_selector_adjacent = false
62
- locator
63
- end
64
-
65
-
66
- def add_class_chain_child_selectors(locator, selectors, single)
67
- locator.single = false unless single # switching from single result to multiple
68
- locator.class_chain_selector += "/" + hash_to_class_chain(selectors, single)
69
- end
70
- end
1
+ require_relative 'locator/attributes'
2
+
3
+ module TestaAppiumDriver
4
+ class Locator
5
+ include TypeSelectors
6
+ include Attributes
7
+ attr_accessor :class_chain_selector
8
+
9
+ def init(params, selectors, single)
10
+ if is_scrollable_selector?(selectors, single)
11
+ @scroll_orientation = :vertical
12
+
13
+ if !params[:top].nil? || !params[:bottom].nil? || !params[:right].nil? || !params[:left].nil?
14
+ @scroll_deadzone = {}
15
+ @scroll_deadzone[:top] = params[:top].to_f unless params[:top].nil?
16
+ @scroll_deadzone[:bottom] = params[:bottom].to_f unless params[:bottom].nil?
17
+ @scroll_deadzone[:right] = params[:right].to_f unless params[:right].nil?
18
+ @scroll_deadzone[:left] = params[:left].to_f unless params[:left].nil?
19
+ end
20
+
21
+ params[:scrollable_locator] = self.dup
22
+ end
23
+
24
+ @class_chain_selector = hash_to_class_chain(selectors, single)
25
+
26
+
27
+ @scrollable_locator = params[:scrollable_locator] if params[:scrollable_locator]
28
+ end
29
+
30
+
31
+ # @return [Array] returns 2 elements. The first is the resolved find element strategy and the second is the resolved selector
32
+ def strategies_and_selectors
33
+ ss = []
34
+ if @can_use_id_strategy
35
+ ss.push({"#{FIND_STRATEGY_NAME}": @can_use_id_strategy})
36
+ end
37
+ ss.push({"#{FIND_STRATEGY_CLASS_CHAIN}": @class_chain_selector}) if @strategy.nil? || @strategy == FIND_STRATEGY_CLASS_CHAIN
38
+ ss.push({"#{FIND_STRATEGY_XPATH}": @xpath_selector}) if @strategy.nil? || @strategy == FIND_STRATEGY_XPATH
39
+ ss.push({"#{FIND_STRATEGY_IMAGE}": @image_selector}) if @strategy == FIND_STRATEGY_IMAGE
40
+ ss
41
+ end
42
+
43
+
44
+
45
+ # @return [Locator] new child locator element
46
+ def add_child_selector(params)
47
+ params, selectors = extract_selectors_from_params(params)
48
+ single = params[:single]
49
+ raise "Cannot add child selector to Array" if single && !@single
50
+
51
+ locator = self.dup
52
+ add_xpath_child_selectors(locator, selectors, single)
53
+ if @strategy.nil? || @strategy == FIND_STRATEGY_CLASS_CHAIN
54
+ add_class_chain_child_selectors(locator, selectors, single)
55
+ end
56
+
57
+ if is_scrollable_selector?(selectors, single)
58
+ locator.scrollable_locator.scroll_orientation = :vertical
59
+ locator.scrollable_locator = locator
60
+ end
61
+
62
+ locator.last_selector_adjacent = false
63
+ locator
64
+ end
65
+
66
+
67
+ def add_class_chain_child_selectors(locator, selectors, single)
68
+ locator.single = false unless single # switching from single result to multiple
69
+ locator.class_chain_selector += "/" + hash_to_class_chain(selectors, single)
70
+ end
71
+ end
71
72
  end
@@ -1,7 +1,7 @@
1
- module Selenium
2
- module WebDriver
3
- class Element
4
- include TestaAppiumDriver::TypeSelectors
5
- end
6
- end
1
+ module ::Appium
2
+ module Core
3
+ class Element
4
+ include TestaAppiumDriver::TypeSelectors
5
+ end
6
+ end
7
7
  end