pagetience 0.3.2 → 0.4.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
  SHA1:
3
- metadata.gz: ac8814a6ca776d7fad70c90486f9f38f2c1f42bf
4
- data.tar.gz: f74c2089d1e57e30212be940474b0714e856f6b0
3
+ metadata.gz: d72d9ede5f1719c7d819dac50cd9c96de24af39d
4
+ data.tar.gz: 1ffef24be2c258c445a33cf0fe346b44b8f19bd7
5
5
  SHA512:
6
- metadata.gz: 94e46d93b746a9b957273cdd4dbbefc7f6f0ee8babcfc30ccf8e6683aff72be5e703a963f5c120fabbb5e84b84988dffcc2ada371ab8d9d7f372e7685f1d1c0d
7
- data.tar.gz: 0669d2022d009a022c61ca9be99bf2a3cf8ca357ff935651470ab7fd2628cfcab8e5b4e8323d1f3de1cdbdab13abd952cceec5d6956a47cf350d44acc4654c81
6
+ metadata.gz: 6aa8a51684bf2443a6d9a5108226162f38faf5d442e84bdf1cade8685a1bfda2f20455ffd89b693ab037df9909285c83c19d82a640bc5dc0b7ae15804446dd35
7
+ data.tar.gz: 639efc4b0bb053daba6b563011862e9d993db2375d3f21426669d727e1d1d49cf6d5f97e359ea9fb75c6c32f36ea83f6482e34a03e046aae0a0a301ad5699e2b
data/README.md CHANGED
@@ -36,7 +36,7 @@ end
36
36
  When an instance of your page object is created then the required elements will be checked for.
37
37
 
38
38
  #### Page transitions
39
- Using the `transition_to` method within your page object, you can now wait for an expected page to transition to.
39
+ Using the `wait_for_transition_to` method within your page object, you can now wait for an expected page to transition to.
40
40
 
41
41
  ```ruby
42
42
  class FirstPage
@@ -76,6 +76,27 @@ expect(@current_page.loaded?).to eq true # true
76
76
  expect(@current_page).to be_an_instance_of SecondPage # true
77
77
  ```
78
78
 
79
+ #### Waiting for individual elements
80
+ The `wait_for_element` method allows you to wait for a specific element on the page to be there. It doesn't have to be one of your `required` fields -- it just has to declared.
81
+
82
+ ```ruby
83
+ class SomePage
84
+ include PageObject
85
+ include Pagetience
86
+
87
+ button :foo, id: 'foo'
88
+
89
+ def wait_for_foo
90
+ wait_for_element :foo
91
+ end
92
+
93
+ def wait_longer_for_foo
94
+ wait_for_element :foo, 60, 5
95
+ end
96
+ end
97
+ end
98
+ ```
99
+
79
100
  #### Adjusting the Timeout/Polling
80
101
  You can use the `waiting` method to specify how long you want to wait and, optionally, at what interval to poll the page for element visibility.
81
102
 
@@ -21,6 +21,10 @@ module Pagetience
21
21
  def underlying_element_for(sym)
22
22
  nil
23
23
  end
24
+
25
+ def is_element_present?(sym)
26
+ false
27
+ end
24
28
  end
25
29
  end
26
30
  end
@@ -28,6 +28,10 @@ module Pagetience
28
28
  def underlying_element_for(sym)
29
29
  @page_object_instance.send("#{sym}_element").element
30
30
  end
31
+
32
+ def is_element_present?(sym)
33
+ @page_object_instance.send("#{sym}_element").visible?
34
+ end
31
35
  end
32
36
  end
33
37
  end
@@ -1,3 +1,3 @@
1
1
  module Pagetience
2
- VERSION = '0.3.2'
2
+ VERSION = '0.4.0'
3
3
  end
data/lib/pagetience.rb CHANGED
@@ -31,7 +31,7 @@ module Pagetience
31
31
  attr_reader :browser, :loaded
32
32
 
33
33
  attr_reader :element_platform
34
- attr_reader :_poller, :_required_elements, :_underlying_elements
34
+ attr_reader :_required_elements
35
35
 
36
36
  def self.included(base)
37
37
  base.extend ClassMethods
@@ -51,8 +51,6 @@ module Pagetience
51
51
  @_waiting_polling = _waiting_polling || 1
52
52
 
53
53
  @_required_elements = _required_elements || []
54
- @_underlying_elements = []
55
- gather_underlying_elements
56
54
  wait_for_required_elements
57
55
  end
58
56
 
@@ -60,35 +58,43 @@ module Pagetience
60
58
  !!@loaded
61
59
  end
62
60
 
63
- def gather_underlying_elements
64
- @_required_elements.each do |e|
65
- @_underlying_elements << @element_platform.underlying_element_for(e)
61
+ def wait_for_required_elements(timeout=nil, polling=nil)
62
+ opts = {
63
+ timeout: timeout || @_waiting_timeout,
64
+ polling: polling || @_waiting_polling,
65
+ expecting: true,
66
+ msg: "Timed out after polling every #{:polling}s for #{:timeout}s waiting for the page to be loaded."
67
+ }
68
+ wait_for(opts) do
69
+ @loaded = true unless @_required_elements.any? { |e| !@element_platform.is_element_present? e }
66
70
  end
67
71
  end
68
72
 
69
- def wait_for_required_elements
70
- @_poller = Pagetience::Meditate.new(@_waiting_timeout, @_waiting_polling) do
71
- begin
72
- unless @_underlying_elements.any? { |e| !e.visible? }
73
- @loaded = true
74
- end
75
- rescue
76
- # TODO implement better strategy for certain platforms
77
- end
78
- end
79
- @_poller.until_enlightened true
80
-
81
- unless loaded?
82
- raise Pagetience::Exceptions::Timeout, "Timed out after polling every #{@_poller.polling}s for #{@_poller.timeout}s waiting for the page to be loaded."
83
- end
73
+ def wait_for_element(sym, timeout=nil, polling=nil)
74
+ opts = {
75
+ timeout: timeout || @_waiting_timeout,
76
+ polling: polling || @_waiting_polling,
77
+ expecting: true,
78
+ msg: "Timed out after waiting for the element #{sym} to be present."
79
+ }
80
+ wait_for(opts) { @element_platform.is_element_present? sym }
84
81
  end
85
82
 
86
- def transition_to(page, timeout=30, polling=1)
83
+ def wait_for_transition_to(page, timeout=nil, polling=nil)
87
84
  page = page.new browser
88
- Pagetience::Meditate.for(timeout: timeout, polling: polling, msg: 'Timed out waiting for page transition.', expecting: true) { page.loaded? }
85
+ opts = {
86
+ timeout: timeout || @_waiting_timeout,
87
+ polling: polling || @_waiting_polling,
88
+ expecting: true,
89
+ msg: "Timed out after waiting for the page to transition to #{page}."
90
+ }
91
+ wait_for(opts) { page.loaded? }
89
92
  page
90
93
  end
91
- alias_method :wait_for_transition_to, :transition_to
94
+
95
+ def wait_for(opts={}, &block)
96
+ Pagetience::Meditate.for(opts) { block.call }
97
+ end
92
98
 
93
99
  private
94
100
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagetience
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek McNeil
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-28 00:00:00.000000000 Z
11
+ date: 2016-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler