site_prism 2.3 → 2.4
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.
- data/README.md +31 -2
- data/lib/site_prism/element_container.rb +24 -12
- data/lib/site_prism/page.rb +5 -6
- data/lib/site_prism/section.rb +7 -1
- data/lib/site_prism/version.rb +1 -1
- metadata +5 -5
data/README.md
CHANGED
@@ -29,6 +29,10 @@ class SearchResults < SitePrism::Page
|
|
29
29
|
|
30
30
|
section :menu, MenuSection, "#gbx3"
|
31
31
|
sections :search_results, SearchResultSection, "#results li"
|
32
|
+
|
33
|
+
def search_result_links
|
34
|
+
search_results.map {|sr| sr.title['href']}
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
38
|
# define sections used on multiple pages or multiple times on one page
|
@@ -75,7 +79,7 @@ Then /^the search results page contains 10 individual search results$/ do
|
|
75
79
|
end
|
76
80
|
|
77
81
|
Then /^the search results contain a link to the wikipedia sausages page$/ do
|
78
|
-
@results_page.
|
82
|
+
@results_page.search_result_links.should include "http://en.wikipedia.org/wiki/Sausage"
|
79
83
|
end
|
80
84
|
```
|
81
85
|
|
@@ -414,6 +418,26 @@ Then /^the search field exists$/ do
|
|
414
418
|
end
|
415
419
|
```
|
416
420
|
|
421
|
+
#### Testing that an element does not exist
|
422
|
+
|
423
|
+
To test that an element does not exist on the page, it is not possible to just call
|
424
|
+
`#should_not have_search_field`. SitePrism supplies the `#has_no_<element>?` method
|
425
|
+
that should be used to test for non-existence. Using the above example:
|
426
|
+
|
427
|
+
```ruby
|
428
|
+
@home = Home.new
|
429
|
+
@home.load
|
430
|
+
@home.has_no_search_field? #=> returns true if it doesn't exist, false if it does
|
431
|
+
```
|
432
|
+
|
433
|
+
...which makes for nice test code:
|
434
|
+
|
435
|
+
```ruby
|
436
|
+
Then /^the search field exists$/ do
|
437
|
+
@home.should have_no_search_field #NB: NOT => @home.should_not_ have_search_field
|
438
|
+
end
|
439
|
+
```
|
440
|
+
|
417
441
|
#### Waiting for an element to exist on a page
|
418
442
|
|
419
443
|
Another method added by calling `element` is the `wait_for_<element_name>` method.
|
@@ -499,6 +523,7 @@ end
|
|
499
523
|
```ruby
|
500
524
|
@home.search_field
|
501
525
|
@home.has_search_field?
|
526
|
+
@home.has_no_search_field?
|
502
527
|
@home.wait_for_search_field
|
503
528
|
@home.wait_for_search_field(10)
|
504
529
|
@home.wait_until_search_field_visible
|
@@ -1269,7 +1294,7 @@ class App
|
|
1269
1294
|
end
|
1270
1295
|
|
1271
1296
|
def results_page
|
1272
|
-
|
1297
|
+
SearchResults.new
|
1273
1298
|
end
|
1274
1299
|
|
1275
1300
|
def maps
|
@@ -1290,6 +1315,10 @@ When /^I search for Sausages$/ do
|
|
1290
1315
|
@app.home.search_button.click
|
1291
1316
|
end
|
1292
1317
|
|
1318
|
+
Then /^I am on the results page$/ do
|
1319
|
+
@app.results_page.should be_displayed
|
1320
|
+
end
|
1321
|
+
|
1293
1322
|
# etc...
|
1294
1323
|
```
|
1295
1324
|
|
@@ -38,6 +38,7 @@ module SitePrism::ElementContainer
|
|
38
38
|
def iframe(iframe_name, iframe_page_class, iframe_id)
|
39
39
|
add_to_mapped_items iframe_name
|
40
40
|
create_existence_checker iframe_name, iframe_id
|
41
|
+
create_nonexistence_checker iframe_name, iframe_id
|
41
42
|
create_waiter iframe_name, iframe_id
|
42
43
|
define_method iframe_name do |&block|
|
43
44
|
within_frame iframe_id.split("#").last do
|
@@ -69,6 +70,7 @@ module SitePrism::ElementContainer
|
|
69
70
|
|
70
71
|
def add_helper_methods(name, *find_args)
|
71
72
|
create_existence_checker name, *find_args
|
73
|
+
create_nonexistence_checker name, *find_args
|
72
74
|
create_waiter name, *find_args
|
73
75
|
create_visibility_waiter name, *find_args
|
74
76
|
create_invisibility_waiter name, *find_args
|
@@ -93,13 +95,24 @@ module SitePrism::ElementContainer
|
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
98
|
+
def create_nonexistence_checker(element_name, *find_args)
|
99
|
+
method_name = "has_no_#{element_name.to_s}?"
|
100
|
+
create_helper_method method_name, *find_args do
|
101
|
+
define_method method_name do
|
102
|
+
Capybara.using_wait_time 0 do
|
103
|
+
element_does_not_exist? *find_args
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
96
109
|
def create_waiter(element_name, *find_args)
|
97
110
|
method_name = "wait_for_#{element_name.to_s}"
|
98
111
|
create_helper_method method_name, *find_args do
|
99
112
|
define_method method_name do |timeout = Capybara.default_wait_time|
|
100
|
-
|
101
|
-
|
102
|
-
|
113
|
+
Capybara.using_wait_time timeout do
|
114
|
+
element_exists? *find_args
|
115
|
+
end
|
103
116
|
end
|
104
117
|
end
|
105
118
|
end
|
@@ -108,13 +121,12 @@ module SitePrism::ElementContainer
|
|
108
121
|
method_name = "wait_until_#{element_name.to_s}_visible"
|
109
122
|
create_helper_method method_name, *find_args do
|
110
123
|
define_method method_name do |timeout = Capybara.default_wait_time|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
Timeout.timeout timeout, SitePrism::TimeOutWaitingForElementVisibility do
|
115
|
-
sleep 0.1 until find_first(*find_args).visible?
|
124
|
+
Timeout.timeout timeout, SitePrism::TimeOutWaitingForElementVisibility do
|
125
|
+
Capybara.using_wait_time 0 do
|
126
|
+
sleep 0.05 while not element_exists? *find_args, visible: true
|
116
127
|
end
|
117
128
|
end
|
129
|
+
end
|
118
130
|
end
|
119
131
|
end
|
120
132
|
|
@@ -122,12 +134,12 @@ module SitePrism::ElementContainer
|
|
122
134
|
method_name = "wait_until_#{element_name.to_s}_invisible"
|
123
135
|
create_helper_method method_name, *find_args do
|
124
136
|
define_method method_name do |timeout = Capybara.default_wait_time|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
end
|
137
|
+
Timeout.timeout timeout, SitePrism::TimeOutWaitingForElementInvisibility do
|
138
|
+
Capybara.using_wait_time 0 do
|
139
|
+
sleep 0.05 while element_exists? *find_args, visible: true
|
129
140
|
end
|
130
141
|
end
|
142
|
+
end
|
131
143
|
end
|
132
144
|
end
|
133
145
|
|
data/lib/site_prism/page.rb
CHANGED
@@ -44,15 +44,10 @@ module SitePrism
|
|
44
44
|
!current_url.match(/^https/).nil?
|
45
45
|
end
|
46
46
|
|
47
|
-
def title
|
48
|
-
title_selector = 'html > head > title'
|
49
|
-
using_wait_time(0) { page.find(title_selector).text if page.has_selector?(title_selector) }
|
50
|
-
end
|
51
|
-
|
52
47
|
private
|
53
48
|
|
54
49
|
def find_first *find_args
|
55
|
-
|
50
|
+
find *find_args
|
56
51
|
end
|
57
52
|
|
58
53
|
def find_all *find_args
|
@@ -62,6 +57,10 @@ module SitePrism
|
|
62
57
|
def element_exists? *find_args
|
63
58
|
has_selector? *find_args
|
64
59
|
end
|
60
|
+
|
61
|
+
def element_does_not_exist? *find_args
|
62
|
+
has_no_selector? *find_args
|
63
|
+
end
|
65
64
|
end
|
66
65
|
end
|
67
66
|
|
data/lib/site_prism/section.rb
CHANGED
@@ -33,7 +33,7 @@ module SitePrism
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def find_first *find_args
|
36
|
-
root_element.
|
36
|
+
root_element.find *find_args
|
37
37
|
end
|
38
38
|
|
39
39
|
def find_all *find_args
|
@@ -45,6 +45,12 @@ module SitePrism
|
|
45
45
|
root_element.has_selector? *find_args
|
46
46
|
end
|
47
47
|
end
|
48
|
+
|
49
|
+
def element_does_not_exist? *find_args
|
50
|
+
unless root_element.nil?
|
51
|
+
root_element.has_no_selector? *find_args
|
52
|
+
end
|
53
|
+
end
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
data/lib/site_prism/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: site_prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.4'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
21
|
+
version: '2.1'
|
22
22
|
- - <
|
23
23
|
- !ruby/object:Gem::Version
|
24
24
|
version: '3.0'
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 2.
|
32
|
+
version: '2.1'
|
33
33
|
- - <
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '3.0'
|
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
version: '0'
|
102
102
|
requirements: []
|
103
103
|
rubyforge_project:
|
104
|
-
rubygems_version: 1.8.
|
104
|
+
rubygems_version: 1.8.23
|
105
105
|
signing_key:
|
106
106
|
specification_version: 3
|
107
107
|
summary: A Page Object Model DSL for Capybara
|