appom 1.1.6 → 1.3.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
  SHA256:
3
- metadata.gz: ca73259e6cc6e55a6def1bf2b0bbe9609e2b6c0fe80a86e7fcc9f8193d6f53ac
4
- data.tar.gz: af52858128229cc9cdf69bf57bfb30cc2ec0e46816a7b33182981704ded448ed
3
+ metadata.gz: 75497e842dc00bf929ffd3752fdc74c3dfb34094c8f74b360e51c137e654f93d
4
+ data.tar.gz: bf5f95feb5aaf74bc1ee39f7a9592c9d6f3b63b3a60d5225777f8f5f506ee806
5
5
  SHA512:
6
- metadata.gz: 29fd801a109c6e10a11ad173b32b157398d239edefe041142811e6a1c521611090c731e981d9c8236028797aa7eefe14f2f27bb030d22c6d977295306c76a625
7
- data.tar.gz: 3eec972de070351475afe1178836b1031c7b64284d4f2878544a64f0c3d64d792e2b0a7905137a4410009f9be0954543e6ff86e144abd2b49a342eb104b6f381
6
+ metadata.gz: '09ea6e4f15eaadcad9627066bad3c51f228882a59b36470a1ff4fc5360b525220bf1f7769bebf019b827ac5c1d6632015695a98c63f19581a5059d3d77bc4a0b'
7
+ data.tar.gz: 8b135b65504c6212668ef6d3a6be1f4dd819e44bb11c14a166f4ab229202603ca50e4e4d9d795418b8f6b6c673f0b7be800f7e8304eaa3e2fe99c6b66bdcaa6d
@@ -42,20 +42,13 @@ module Appom
42
42
  # Element doesn't support block so that will raise if pass a block when declare
43
43
  #
44
44
  def element(name, *find_args)
45
- args, text = deduce_element_args(find_args)
46
-
47
- build_element(name, *args) do
45
+ build_element(name, *find_args) do
48
46
  define_method(name) do |*runtime_args, &block|
49
47
  raise_if_block(self, name, !block.nil?, :element)
50
- if text.nil?
51
- _find(*merge_args(args, runtime_args))
52
- else
53
- find_element_has_text(text, *merge_args(args, runtime_args))
54
- end
48
+ _find(*merge_args(find_args, runtime_args))
55
49
  end
56
50
 
57
- create_get_element_params(name, args)
58
- define_get_element_text(name, text)
51
+ create_get_element_params(name, find_args)
59
52
  end
60
53
  end
61
54
 
@@ -274,43 +267,6 @@ module Appom
274
267
  end
275
268
  end
276
269
 
277
- ##
278
- # Get text is passed when declared element
279
- #
280
- def define_get_element_text(element_name, text)
281
- method_name = "#{element_name}_text"
282
- define_method(method_name) do
283
- text
284
- end
285
- end
286
-
287
- ##
288
- # Deduce args and other parameters
289
- # @return args for appium and other parameters
290
- #
291
- def deduce_element_args(args)
292
- # Flatten argument array first if we are in case array inside array
293
- args = args.flatten
294
-
295
- if args.empty?
296
- raise(ArgumentError, 'You should provide search arguments in element creation')
297
- end
298
-
299
- # Get last key and check if it contain 'text' key
300
- text = nil
301
-
302
- args.each do |arg|
303
- if arg.is_a?(Hash)
304
- # Extract text value
305
- if arg.key?(:text)
306
- text = arg[:text]
307
- args.delete(arg)
308
- end
309
- end
310
- end
311
- [args, text]
312
- end
313
-
314
270
  ##
315
271
  # Extract section options
316
272
  # @return section class name and the remaining parameters
@@ -2,16 +2,30 @@ module Appom
2
2
  module ElementFinder
3
3
  # Find an element
4
4
  def _find(*find_args)
5
+ args, text, visible = deduce_element_args(find_args)
5
6
  wait = Wait.new(timeout: Appom.max_wait_time)
7
+
6
8
  wait.until do
7
- elements = page.find_elements(*find_args)
9
+ elements = page.find_elements(*args)
8
10
  elements.each do |element|
9
- if element.displayed?
11
+ if !visible.nil? && !text.nil?
12
+ if element.displayed? && element.text == text
13
+ return element
14
+ end
15
+ elsif !visible.nil?
16
+ if element.displayed?
17
+ return element
18
+ end
19
+ elsif !text.nil?
20
+ if element.text == text
21
+ return element
22
+ end
23
+ # Just return first element
24
+ else
10
25
  return element
11
26
  end
12
27
  end
13
-
14
- raise Appom::ElementsEmptyError, "Not found element displayed"
28
+ raise Appom::ElementsEmptyError, "Can not found element with args = #{find_args}"
15
29
  end
16
30
  end
17
31
 
@@ -20,11 +34,32 @@ module Appom
20
34
  page.find_elements(*find_args)
21
35
  end
22
36
 
23
- # Check page has or has not elment with find_args
37
+ # Check page has or has not element with find_args
24
38
  # If page has element return TRUE else return FALSE
25
39
  def _check_has_element(*find_args)
26
- elements = page.find_elements(*find_args)
27
- return elements.empty? ? false : true
40
+ elements = page.find_elements(*args)
41
+
42
+ if visible.nil? && text.nil?
43
+ return elements.empty? ? false : true
44
+ else
45
+ is_found = false
46
+ elements.each do |element|
47
+ if !visible.nil? && !text.nil?
48
+ if element.displayed? && element.text == text
49
+ is_found = true
50
+ end
51
+ elsif !visible.nil?
52
+ if element.displayed?
53
+ is_found = true
54
+ end
55
+ elsif !text.nil?
56
+ if element.text == text
57
+ is_found = true
58
+ end
59
+ end
60
+ end
61
+ return is_found
62
+ end
28
63
  end
29
64
 
30
65
  ##
@@ -37,29 +72,13 @@ module Appom
37
72
  result = page.find_elements(*find_args)
38
73
  # If reponse is empty we will return false to make it not pass Wait condition
39
74
  if result.empty?
40
- raise Appom::ElementsEmptyError, "Array is empty"
75
+ raise Appom::ElementsEmptyError, "Can not found any elements with args = #{find_args}"
41
76
  end
42
77
  # Return result
43
78
  return result
44
79
  end
45
80
  end
46
81
 
47
- # Find element with has text match with `text` value
48
- # If not find element will raise error
49
- def find_element_has_text(text, *find_args)
50
- wait = Wait.new(timeout: Appom.max_wait_time)
51
- wait.until do
52
- elements = page.find_elements(*find_args)
53
- elements.each do |element|
54
- if element.displayed? && element.text == text
55
- return element
56
- end
57
-
58
- raise Appom::ElementsEmptyError, "Not found element with text #{text}"
59
- end
60
- end
61
- end
62
-
63
82
  # Function is used to check
64
83
  # Note: Function WILL NOT RETURN ELEMENT
65
84
  def wait_until(type, *find_args)
@@ -68,18 +87,51 @@ module Appom
68
87
  case type
69
88
  # Function only return true if element enabled or raise an error if time out
70
89
  when 'element enable'
71
- page.find_element(*find_args).enabled?
90
+ _find(*find_args).enabled?
72
91
  # Function only return true if element disabled or raise an error if time out
73
92
  when 'element disable'
74
- !page.find_element(*find_args).enabled?
93
+ !_find(*find_args).enabled?
75
94
  # Function only return true if we can find at leat one element (array is not empty) or raise error
76
95
  when 'at least one element exists'
77
- !page.find_elements(*find_args).empty?
96
+ args, text, visible = deduce_element_args(find_args)
97
+ !page.find_elements(*args).empty?
78
98
  # Function only return true if we can't find at leat one element (array is empty) or raise error
79
99
  when 'no element exists'
80
- page.find_elements(*find_args).empty?
100
+ args, text, visible = deduce_element_args(find_args)
101
+ page.find_elements(*args).empty?
102
+ end
103
+ end
104
+ end
105
+
106
+ private
107
+
108
+ def deduce_element_args(args)
109
+ # Flatten argument array first if we are in case array inside array
110
+ args = args.flatten
111
+
112
+ if args.empty?
113
+ raise(ArgumentError, 'You should provide search arguments in element creation')
114
+ end
115
+
116
+ # Get last key and check if it contain 'text' key
117
+ text = nil
118
+ visible = nil
119
+
120
+ args.each do |arg|
121
+ if arg.is_a?(Hash)
122
+ # Extract text value
123
+ if arg.key?(:text)
124
+ text = arg[:text]
125
+ args.delete(arg)
126
+ end
127
+ # Extract visible value
128
+ if arg.key?(:visible)
129
+ visible = arg[:visible]
130
+ args.delete(arg)
131
+ end
81
132
  end
82
133
  end
134
+ [args, text, visible]
83
135
  end
84
136
  end
85
137
  end
data/lib/appom/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Appom
2
- VERSION = '1.1.6'.freeze
2
+ VERSION = '1.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appom
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry.Tran
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2021-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appium_lib
@@ -74,7 +74,7 @@ homepage: https://github.com/hoangtaiki/appom
74
74
  licenses:
75
75
  - MIT
76
76
  metadata: {}
77
- post_install_message:
77
+ post_install_message:
78
78
  rdoc_options: []
79
79
  require_paths:
80
80
  - lib
@@ -89,9 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  requirements: []
92
- rubyforge_project:
93
- rubygems_version: 2.7.9
94
- signing_key:
92
+ rubygems_version: 3.2.19
93
+ signing_key:
95
94
  specification_version: 4
96
95
  summary: A Page Object Model for Appium
97
96
  test_files: []