appom 0.6.0 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0949477113260f4e785a805fa8e65fba84220ba6a0ee596f28fa41b429e672cc
4
- data.tar.gz: 3b0a17a7cdfca9377d16fb5db85a756e8fa9bab30de7fca678a60f349b421f0a
3
+ metadata.gz: 32300dd3f4ed1e4ff737e2614ab06ce5c976b4cab63701b83207ab56419c1ebf
4
+ data.tar.gz: de9ef291dee27ace03da53c601f29b7d0143cf71ad51dcf95e32ba5cf494f2be
5
5
  SHA512:
6
- metadata.gz: 762d159a3d726469f66dcfe6334a4ccfc8174fe63602c6f238759c6295a8edbc305780804bb9811dba54407e77f9153c220c4d711303043667d4599480c4030a
7
- data.tar.gz: baaaa66a0fb77ad1917451b5f54216bc7c1331c52f622f19c212f612fff1494480980a7eee07256eea152554edb6aec0c610bc4da73abf04014e131902619191
6
+ metadata.gz: e356e9bd0586b78bc5cd8dc47dbb11e3de9cdaf531db7fdc27e4a64fa25e03162be3e04ba0126be099162500cce4a1723617f880bcf26000a2d1216cf812a0f4
7
+ data.tar.gz: 37c7e1ad64adae8dbf3a0033bbfe0264d11c7d9ae35c4a2df0d1e535298c9c6868011db5f322e64090134a42958851f8f1dff9b2dea6aa56b032a3cd8fa3ce10
@@ -18,6 +18,8 @@ module Appom
18
18
  autoload :ElementContainer, 'appom/element_container'
19
19
  autoload :Page, 'appom/page'
20
20
  autoload :Wait, 'appom/wait'
21
+ autoload :Section, 'appom/section'
22
+ autoload :ElementFinder, 'appom/element_finder'
21
23
 
22
24
  class << self
23
25
  attr_accessor :driver
@@ -42,13 +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
- build_element(name, *find_args) do |*runtime_args, &block|
46
- define_method(name) do
45
+ build_element(name, *find_args) do
46
+ define_method(name) do |*runtime_args, &block|
47
47
  raise_if_block(self, name, !block.nil?, :element)
48
- find(*merge_args(find_args, runtime_args))
48
+ _find(*merge_args(find_args, runtime_args))
49
49
  end
50
50
  define_method("#{name}_params") do
51
- merge_args(find_args, runtime_args)
51
+ merge_args(find_args)
52
52
  end
53
53
  end
54
54
  end
@@ -66,13 +66,41 @@ module Appom
66
66
  # Elements doesn't support block so that will raise if pass a block when declare
67
67
  #
68
68
  def elements(name, *find_args)
69
- build_elements(name, *find_args) do |*runtime_args, &block|
70
- define_method(name) do
69
+ build_elements(name, *find_args) do
70
+ define_method(name) do |*runtime_args, &block|
71
71
  raise_if_block(self, name, !block.nil?, :elements)
72
- all(*merge_args(find_args, runtime_args))
72
+ _all(*merge_args(find_args, runtime_args))
73
73
  end
74
74
  define_method("#{name}_params") do
75
- merge_args(find_args, runtime_args)
75
+ merge_args(find_args)
76
+ end
77
+ end
78
+ end
79
+
80
+ def section(name, *args, &block)
81
+ section_class, find_args = extract_section_options(args, &block)
82
+ build_element(name, *find_args) do
83
+ define_method(name) do |*runtime_args, &block|
84
+ section_element = _find(*merge_args(find_args, runtime_args))
85
+ section_class.new(self, section_element)
86
+ end
87
+ define_method("#{name}_params") do
88
+ merge_args(find_args)
89
+ end
90
+ end
91
+ end
92
+
93
+ def sections(name, *args, &block)
94
+ section_class, find_args = extract_section_options(args, &block)
95
+ build(name, *find_args) do
96
+ define_method(name) do |*runtime_args, &block|
97
+ raise_if_block(self, name, !block.nil?, :sections)
98
+ _all(*merge_args(find_args, runtime_args)).map do |element|
99
+ section_class.new(self, element)
100
+ end
101
+ end
102
+ define_method("#{name}_params") do
103
+ merge_args(find_args)
76
104
  end
77
105
  end
78
106
  end
@@ -207,6 +235,49 @@ module Appom
207
235
  end
208
236
  end
209
237
  end
238
+
239
+ ##
240
+ # Extract section options
241
+ # @return section class name and the remaining parameters
242
+ #
243
+ def extract_section_options(args, &block)
244
+ if args.first.is_a?(Class)
245
+ klass = args.shift
246
+ section_class = klass if klass.ancestors.include?(Appom::Section)
247
+ end
248
+
249
+ section_class = deduce_section_class(section_class, &block)
250
+ arguments = deduce_search_arguments(section_class, args)
251
+ [section_class, arguments]
252
+ end
253
+
254
+ ##
255
+ # Deduce section class
256
+ #
257
+ def deduce_section_class(base_class, &block)
258
+ klass = base_class
259
+
260
+ klass = Class.new(klass || Appom::Section, &block) if block_given?
261
+
262
+ unless klass
263
+ raise ArgumentError, 'You should provide descendant of Appom::Section class or/and a block as the second argument.'
264
+ end
265
+ klass
266
+ end
267
+
268
+ ##
269
+ # Deduce search parameters
270
+ #
271
+ def deduce_search_arguments(section_class, args)
272
+ extract_search_arguments(args) ||
273
+ extract_search_arguments(section_class.default_search_arguments) ||
274
+ raise(ArgumentError, 'You should provide search arguments in section creation or set_default_search_arguments within section class')
275
+ end
276
+
277
+ def extract_search_arguments(args)
278
+ args if args && !args.empty?
279
+ end
280
+
210
281
  end
211
282
  end
212
283
  end
@@ -0,0 +1,69 @@
1
+ module Appom
2
+ module ElementFinder
3
+ # Find an element
4
+ def _find(*find_args)
5
+ wait = Wait.new(timeout: Appom.max_wait_time)
6
+ wait.until { page.find_element(*find_args) }
7
+ end
8
+
9
+ # Find elements
10
+ def _all(*find_args)
11
+ page.find_elements(*find_args)
12
+ end
13
+
14
+ ##
15
+ # Use wait to check element non-exist
16
+ # Before timeout we will try to find elements and check response is empty
17
+ #
18
+ def wait_check_util_empty(*find_args)
19
+ wait = Wait.new(timeout: Appom.max_wait_time)
20
+ wait.until do
21
+ page.find_elements(*find_args).empty?
22
+ end
23
+ end
24
+
25
+ ##
26
+ # Use wait to check element exist
27
+ # Before timeout we will try to find elements and check response is not empty
28
+ #
29
+ def wait_check_util_not_empty(*find_args)
30
+ wait = Wait.new(timeout: Appom.max_wait_time)
31
+ wait.until do
32
+ !page.find_elements(*find_args).empty?
33
+ end
34
+ end
35
+
36
+ ##
37
+ # Use wait to get elements
38
+ # Before timeout we will try to find elements until response is not empty
39
+ #
40
+ def wait_util_get_not_empty(*find_args)
41
+ wait = Wait.new(timeout: Appom.max_wait_time)
42
+ wait.until do
43
+ result = page.find_elements(*find_args)
44
+ # If reponse is empty we will return false to make it not pass Wait condition
45
+ if result.empty?
46
+ return false
47
+ end
48
+ # Return result
49
+ return result
50
+ end
51
+ end
52
+
53
+ ##
54
+ # Wait until an element will be enable
55
+ #
56
+ def wait_util_element_enabled(*find_args)
57
+ wait = Wait.new(timeout: Appom.max_wait_time)
58
+ wait.until { page.find_element(*find_args).enabled? }
59
+ end
60
+
61
+ ##
62
+ # Wait until an element will be disable
63
+ #
64
+ def wait_util_element_disabled(*find_args)
65
+ wait = Wait.new(timeout: Appom.max_wait_time)
66
+ wait.until { !page.find_element(*find_args).enabled? }
67
+ end
68
+ end
69
+ end
@@ -2,71 +2,10 @@ module Appom
2
2
  class Page
3
3
  include Appium
4
4
  include ElementContainer
5
+ include ElementFinder
5
6
 
6
- # Find an element
7
- def find(*find_args)
8
- wait = Wait.new(timeout: Appom.max_wait_time)
9
- wait.until { Appom.driver.find_element(*find_args) }
10
- end
11
-
12
- # Find elements
13
- def all(*find_args)
14
- Appom.driver.find_elements(*find_args)
15
- end
16
-
17
- ##
18
- # Use wait to check element non-exist
19
- # Before timeout we will try to find elements and check response is empty
20
- #
21
- def wait_check_util_empty(*find_args)
22
- wait = Wait.new(timeout: Appom.max_wait_time)
23
- wait.until do
24
- Appom.driver.find_elements(*find_args).empty?
25
- end
26
- end
27
-
28
- ##
29
- # Use wait to check element exist
30
- # Before timeout we will try to find elements and check response is not empty
31
- #
32
- def wait_check_util_not_empty(*find_args)
33
- wait = Wait.new(timeout: Appom.max_wait_time)
34
- wait.until do
35
- !Appom.driver.find_elements(*find_args).empty?
36
- end
37
- end
38
-
39
- ##
40
- # Use wait to get elements
41
- # Before timeout we will try to find elements until response is not empty
42
- #
43
- def wait_util_get_not_empty(*find_args)
44
- wait = Wait.new(timeout: Appom.max_wait_time)
45
- wait.until do
46
- result = Appom.driver.find_elements(*find_args)
47
- # If reponse is empty we will return false to make it not pass Wait condition
48
- if result.empty?
49
- return false
50
- end
51
- # Return result
52
- return result
53
- end
54
- end
55
-
56
- ##
57
- # Wait until an element will be enable
58
- #
59
- def wait_util_element_enabled(*find_args)
60
- wait = Wait.new(timeout: Appom.max_wait_time)
61
- wait.until { Appom.driver.find_element(*find_args).enabled? }
62
- end
63
-
64
- ##
65
- # Wait until an element will be disable
66
- #
67
- def wait_util_element_disabled(*find_args)
68
- wait = Wait.new(timeout: Appom.max_wait_time)
69
- wait.until { !Appom.driver.find_element(*find_args).enabled? }
7
+ def page
8
+ @page || Appom.driver
70
9
  end
71
10
  end
72
11
  end
@@ -0,0 +1,28 @@
1
+ module Appom
2
+ class Section
3
+ include Appium
4
+ include ElementContainer
5
+ include ElementFinder
6
+
7
+ attr_reader :root_element, :parent
8
+
9
+ def initialize(parent, root_element)
10
+ @parent = parent
11
+ @root_element = root_element
12
+ end
13
+
14
+ def page
15
+ root_element || super
16
+ end
17
+
18
+ def parent_page
19
+ candidate_page = parent
20
+ until candidate_page.is_a?(SitePrism::Page)
21
+ candidate_page = candidate_page.parent
22
+ end
23
+ candidate_page
24
+ end
25
+
26
+ private
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module Appom
2
- VERSION = '0.6.0'.freeze
2
+ VERSION = '0.7.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: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry.Tran
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-28 00:00:00.000000000 Z
11
+ date: 2018-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appium_lib
@@ -65,7 +65,9 @@ files:
65
65
  - lib/appom.rb
66
66
  - lib/appom/cucumber.rb
67
67
  - lib/appom/element_container.rb
68
+ - lib/appom/element_finder.rb
68
69
  - lib/appom/page.rb
70
+ - lib/appom/section.rb
69
71
  - lib/appom/version.rb
70
72
  - lib/appom/wait.rb
71
73
  homepage: https://github.com/hoangtaiki/appom