page-object 0.6.8 → 0.6.9
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/ChangeLog +10 -0
- data/features/div.feature +1 -0
- data/features/html/static_elements.html +3 -2
- data/features/label.feature +1 -0
- data/features/link.feature +1 -0
- data/features/select_list.feature +4 -0
- data/features/step_definitions/select_list_steps.rb +4 -0
- data/features/support/page.rb +5 -2
- data/features/text_field.feature +2 -0
- data/lib/page-object/accessors.rb +4 -1
- data/lib/page-object/elements/div.rb +2 -2
- data/lib/page-object/elements/link.rb +2 -2
- data/lib/page-object/elements/text_field.rb +2 -2
- data/lib/page-object/javascript/yui.rb +19 -0
- data/lib/page-object/javascript_framework_facade.rb +2 -0
- data/lib/page-object/page_populator.rb +1 -0
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +4 -0
- data/lib/page-object/platforms/selenium_webdriver/select_list.rb +11 -0
- data/lib/page-object/platforms/watir_webdriver/select_list.rb +8 -0
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +1 -1
- data/spec/page-object/elements/div_spec.rb +2 -2
- data/spec/page-object/elements/link_spec.rb +2 -2
- data/spec/page-object/elements/text_field_spec.rb +2 -2
- data/spec/page-object/page_populator_spec.rb +8 -4
- metadata +16 -15
data/ChangeLog
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== Version 0.6.9 / 2012-6-12
|
2
|
+
* Enhancements
|
3
|
+
* Added select_value method to SelectList
|
4
|
+
* Updated link to be able to identify by title
|
5
|
+
* Updated div to be able to identify by title
|
6
|
+
* Updated text_field to be able to identify by text and label
|
7
|
+
* Updated to use selenium-webdriver 2.22.2
|
8
|
+
* Fixes
|
9
|
+
* Fixed populate_page_with to work with text areas (Thanks ramyav85)
|
10
|
+
|
1
11
|
=== Version 0.6.8 / 2012-6-3
|
2
12
|
* Enhancements
|
3
13
|
* Updated [] method on Table to return nil when bad row header is provided
|
data/features/div.feature
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
<body>
|
6
6
|
<p id='p_id' name='p_name' class='p_class'>Static Elements Page</p>
|
7
7
|
|
8
|
+
<label for="text_field_id">Text Field</label>
|
8
9
|
<input id="text_field_id" name="text_field_name" class="text_field_class"
|
9
10
|
title="text_field_title" size="40" type="text"/>
|
10
11
|
|
@@ -24,14 +25,14 @@
|
|
24
25
|
<option value="option3" selected="true">Test 3</option>
|
25
26
|
</select>
|
26
27
|
|
27
|
-
<a href="success.html" id="link_id" name="link_name" class="link_class">Google Search</a>
|
28
|
+
<a href="success.html" id="link_id" name="link_name" class="link_class" title="link_title">Google Search</a>
|
28
29
|
|
29
30
|
<input id="cb_id" name="cb_name" class="cb_class" type="checkbox" value="1"/>
|
30
31
|
|
31
32
|
<input type="radio" id="milk_id" name="milk_name" class="milk_class" value="Milk"> Milk <br/>
|
32
33
|
<input type="radio" id="butter_id" name="butter_name" class="butter_class" value="Butter">Butter
|
33
34
|
|
34
|
-
<div id="div_id" name="div_name" class="div_class">
|
35
|
+
<div id="div_id" name="div_name" class="div_class" title="div_title">
|
35
36
|
page-object rocks!
|
36
37
|
</div>
|
37
38
|
|
data/features/label.feature
CHANGED
data/features/link.feature
CHANGED
@@ -60,3 +60,7 @@ Feature: Select List
|
|
60
60
|
Scenario: Clearing multiple select list
|
61
61
|
When I clear multiple select list
|
62
62
|
Then multiple select list should have no selected options
|
63
|
+
|
64
|
+
Scenario: Selecting an option by its value
|
65
|
+
When I select an option using the value "option2"
|
66
|
+
Then the selected option should be "Test 2"
|
@@ -55,3 +55,7 @@ end
|
|
55
55
|
Then /^multiple select list should have no selected options$/ do
|
56
56
|
@page.sel_list_multiple_element.selected_options.should be_empty
|
57
57
|
end
|
58
|
+
|
59
|
+
When /^I select an option using the value "([^\"]*)"$/ do |value|
|
60
|
+
@page.sel_list_id_element.select_value(value)
|
61
|
+
end
|
data/features/support/page.rb
CHANGED
@@ -17,6 +17,7 @@ class Page
|
|
17
17
|
text_field(:text_field_index, :index => 0)
|
18
18
|
text_field(:text_field_text, :text => "")
|
19
19
|
text_field(:text_field_value, :value => "")
|
20
|
+
text_field(:text_field_label, :label => "Text Field")
|
20
21
|
text_field(:text_field_title, :title => 'text_field_title')
|
21
22
|
text_field(:text_field_class_index, :class => "text_field_class", :index => 0)
|
22
23
|
text_field(:text_field_name_index, :name => "text_field_name", :index => 0)
|
@@ -55,6 +56,7 @@ class Page
|
|
55
56
|
link(:google_search_text, :text => "Google Search")
|
56
57
|
link(:google_search_index, :index => 0)
|
57
58
|
link(:google_search_css, :css => "a.link_class")
|
59
|
+
link(:google_search_title, :title => "link_title")
|
58
60
|
|
59
61
|
select_list(:sel_list_id, :id => "sel_list_id")
|
60
62
|
select_list(:sel_list_class, :class => "sel_list_class")
|
@@ -93,6 +95,7 @@ class Page
|
|
93
95
|
div(:div_text, :text => 'page-object rocks!')
|
94
96
|
div(:div_index, :index => 0)
|
95
97
|
div(:div_xpath, :xpath => '//div')
|
98
|
+
div(:div_title, :title => 'div_title')
|
96
99
|
div(:div_class_index, :class => "div_class", :index => 0)
|
97
100
|
div(:div_name_index, :name => "div_name", :index => 0)
|
98
101
|
|
@@ -265,8 +268,8 @@ class Page
|
|
265
268
|
label(:label_name, :name => 'label_name')
|
266
269
|
label(:label_class, :class => 'label_class')
|
267
270
|
label(:label_text, :text => 'page-object is the best!')
|
268
|
-
label(:label_index, :index =>
|
269
|
-
label(:label_xpath, :xpath => '//label')
|
271
|
+
label(:label_index, :index => 1)
|
272
|
+
label(:label_xpath, :xpath => '//label[2]')
|
270
273
|
label(:label_class_index, :class => "label_class", :index => 0)
|
271
274
|
label(:label_name_index, :name => "label_name", :index => 0)
|
272
275
|
|
data/features/text_field.feature
CHANGED
@@ -99,8 +99,9 @@ module PageObject
|
|
99
99
|
# * :class => Watir and Selenium
|
100
100
|
# * :id => Watir and Selenium
|
101
101
|
# * :index => Watir and Selenium
|
102
|
+
# * :label => Watir and Selenium
|
102
103
|
# * :name => Watir and Selenium
|
103
|
-
# * :text => Watir
|
104
|
+
# * :text => Watir and Selenium
|
104
105
|
# * :title => Watir and Selenium
|
105
106
|
# * :value => Watir only
|
106
107
|
# * :xpath => Watir and Selenium
|
@@ -266,6 +267,7 @@ module PageObject
|
|
266
267
|
# * :link_text => Watir and Selenium
|
267
268
|
# * :name => Watir and Selenium
|
268
269
|
# * :text => Watir and Selenium
|
270
|
+
# * :title => Watir and Selenium
|
269
271
|
# * :xpath => Watir and Selenium
|
270
272
|
# @param optional block to be invoked when element method is called
|
271
273
|
#
|
@@ -433,6 +435,7 @@ module PageObject
|
|
433
435
|
# * :index => Watir and Selenium
|
434
436
|
# * :name => Watir and Selenium
|
435
437
|
# * :text => Watir and Selenium
|
438
|
+
# * :title => Watir and Selenium
|
436
439
|
# * :xpath => Watir and Selenium
|
437
440
|
# @param optional block to be invoked when element method is called
|
438
441
|
#
|
@@ -5,11 +5,11 @@ module PageObject
|
|
5
5
|
protected
|
6
6
|
|
7
7
|
def self.watir_finders
|
8
|
-
|
8
|
+
super + [:text, :title]
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.selenium_finders
|
12
|
-
|
12
|
+
super + [:text, :title]
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -11,7 +11,7 @@ module PageObject
|
|
11
11
|
protected
|
12
12
|
|
13
13
|
def self.watir_finders
|
14
|
-
super + [:href, :text, :css]
|
14
|
+
super + [:href, :text, :css, :title]
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.watir_mapping
|
@@ -19,7 +19,7 @@ module PageObject
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.selenium_finders
|
22
|
-
super + [:link, :link_text, :css]
|
22
|
+
super + [:link, :link_text, :css, :title]
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.selenium_mapping
|
@@ -15,11 +15,11 @@ module PageObject
|
|
15
15
|
protected
|
16
16
|
|
17
17
|
def self.watir_finders
|
18
|
-
super + [:title]
|
18
|
+
super + [:title, :value, :text, :label]
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.selenium_finders
|
22
|
-
super + [:title]
|
22
|
+
super + [:title, :value, :text, :label]
|
23
23
|
end
|
24
24
|
|
25
25
|
def include_platform_for platform
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PageObject
|
2
|
+
module Javascript
|
3
|
+
|
4
|
+
module YUI
|
5
|
+
#
|
6
|
+
# return the number of pending ajax requests
|
7
|
+
#
|
8
|
+
def self.pending_requests
|
9
|
+
"var inProgress=0
|
10
|
+
for(var i=0; i < YAHOO.util.Connect._transaction_id; i++) {
|
11
|
+
if(YAHOO.util.Connect.isCallInProgress(i))
|
12
|
+
inProgress++;
|
13
|
+
}
|
14
|
+
return inProgress;"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'page-object/javascript/jquery'
|
2
2
|
require 'page-object/javascript/prototype'
|
3
|
+
require 'page-object/javascript/yui'
|
3
4
|
|
4
5
|
|
5
6
|
module PageObject
|
@@ -61,6 +62,7 @@ module PageObject
|
|
61
62
|
@builder = {
|
62
63
|
:jquery => ::PageObject::Javascript::JQuery,
|
63
64
|
:prototype => ::PageObject::Javascript::Prototype,
|
65
|
+
:yui => ::PageObject::Javascript::YUI,
|
64
66
|
}
|
65
67
|
end
|
66
68
|
|
@@ -949,11 +949,15 @@ module PageObject
|
|
949
949
|
return false if identifier[:src] and tag == 'input' and
|
950
950
|
['submit', 'image', 'button', 'reset'].include? additional[:type]
|
951
951
|
return false if identifier[:src] and tag == 'img'
|
952
|
+
return false if identifier[:label]
|
952
953
|
return false if identifier[:text] and tag == 'input' and additional[:type] == 'hidden'
|
954
|
+
return false if identifier[:text] and tag == 'input' and additional[:type] == 'text'
|
953
955
|
return false if identifier[:text] and ['div', 'span', 'td', 'label'].include? tag
|
954
956
|
return false if identifier[:title] and tag == 'input' and additional[:type] == 'text'
|
955
957
|
return false if identifier[:title] and tag == 'input' and additional[:type] == 'file'
|
958
|
+
return false if identifier[:title] and tag == 'a'
|
956
959
|
return false if identifier[:title] and tag == 'span'
|
960
|
+
return false if identifier[:title] and tag == 'div'
|
957
961
|
return false if identifier[:value] and tag == 'input' and
|
958
962
|
['radio', 'submit', 'image', 'button', 'reset', 'checkbox', 'hidden'].include? additional[:type]
|
959
963
|
true
|
@@ -22,6 +22,17 @@ module PageObject
|
|
22
22
|
end.click
|
23
23
|
end
|
24
24
|
|
25
|
+
#
|
26
|
+
# Select the option(s) whose value attribute matches the given
|
27
|
+
# string
|
28
|
+
#
|
29
|
+
def select_value(value)
|
30
|
+
options = find_options.find_all do |option|
|
31
|
+
option.attribute('value') == value
|
32
|
+
end
|
33
|
+
options.each {|opt| opt.click}
|
34
|
+
end
|
35
|
+
|
25
36
|
#
|
26
37
|
# Return an array of Options contained in the select lit.
|
27
38
|
#
|
@@ -20,6 +20,14 @@ module PageObject
|
|
20
20
|
element.select(value)
|
21
21
|
end
|
22
22
|
|
23
|
+
#
|
24
|
+
# Select the option(s) whose value attribute matches the given
|
25
|
+
# string
|
26
|
+
#
|
27
|
+
def select_value(value)
|
28
|
+
element.select_value(value)
|
29
|
+
end
|
30
|
+
|
23
31
|
#
|
24
32
|
# Return an array of Options contained in the select lit.
|
25
33
|
#
|
data/lib/page-object/version.rb
CHANGED
data/page-object.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
s.add_dependency 'watir-webdriver', '>= 0.6.1'
|
23
|
-
s.add_dependency 'selenium-webdriver', '>= 2.22.
|
23
|
+
s.add_dependency 'selenium-webdriver', '>= 2.22.2'
|
24
24
|
|
25
25
|
s.add_development_dependency 'rspec', '>= 2.6.0'
|
26
26
|
s.add_development_dependency 'cucumber', '< 1.2.0'
|
@@ -6,14 +6,14 @@ describe PageObject::Elements::Div do
|
|
6
6
|
|
7
7
|
describe "when mapping how to find an element" do
|
8
8
|
it "should map watir types to same" do
|
9
|
-
[:class, :id, :text, :index, :xpath].each do |t|
|
9
|
+
[:class, :id, :text, :index, :xpath, :name, :title].each do |t|
|
10
10
|
identifier = div.watir_identifier_for t => 'value'
|
11
11
|
identifier.keys.first.should == t
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :text, :index, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :text, :index, :name, :xpath, :title].each do |t|
|
17
17
|
key, value = div.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -6,7 +6,7 @@ describe PageObject::Elements::Link do
|
|
6
6
|
|
7
7
|
describe "when mapping how to find an element" do
|
8
8
|
it "should map watir types to same" do
|
9
|
-
[:class, :href, :id, :index, :name, :text, :xpath, :css].each do |t|
|
9
|
+
[:class, :href, :id, :index, :name, :text, :xpath, :css, :title].each do |t|
|
10
10
|
identifier = link.watir_identifier_for t => 'value'
|
11
11
|
identifier.keys.first.should == t
|
12
12
|
end
|
@@ -20,7 +20,7 @@ describe PageObject::Elements::Link do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should map selenium types to same" do
|
23
|
-
[:class, :id, :link, :link_text, :name, :xpath, :index, :css].each do |t|
|
23
|
+
[:class, :id, :link, :link_text, :name, :xpath, :index, :css, :title].each do |t|
|
24
24
|
key, value = link.selenium_identifier_for t => 'value'
|
25
25
|
key.should == t
|
26
26
|
end
|
@@ -7,14 +7,14 @@ describe PageObject::Elements::TextField do
|
|
7
7
|
let(:textfield) { PageObject::Elements::TextField }
|
8
8
|
|
9
9
|
it "should map watir types to same" do
|
10
|
-
[:class, :id, :index, :name, :title, :xpath].each do |t|
|
10
|
+
[:class, :id, :index, :name, :title, :xpath, :text, :label].each do |t|
|
11
11
|
identifier = textfield.watir_identifier_for t => 'value'
|
12
12
|
identifier.keys.first.should == t
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should map selenium types to same" do
|
17
|
-
[:class, :id, :name, :title, :xpath, :index].each do |t|
|
17
|
+
[:class, :id, :name, :title, :xpath, :index, :text, :label].each do |t|
|
18
18
|
key, value = textfield.selenium_identifier_for t => 'value'
|
19
19
|
key.should == t
|
20
20
|
end
|
@@ -28,14 +28,16 @@ describe PageObject::PagePopulator do
|
|
28
28
|
|
29
29
|
it "should not populate a text field when it is disabled" do
|
30
30
|
page_object.should_not_receive(:tf=)
|
31
|
-
page_object.should_receive(:tf_element).and_return(browser)
|
31
|
+
page_object.should_receive(:tf_element).twice.and_return(browser)
|
32
32
|
browser.should_receive(:enabled?).and_return(false)
|
33
|
+
browser.should_receive(:tag_name).and_return('input')
|
33
34
|
page_object.populate_page_with('tf' => true)
|
34
35
|
end
|
35
36
|
|
36
37
|
it "should set a value in a text area" do
|
37
38
|
page_object.should_receive(:ta=).with('value')
|
38
|
-
page_object.
|
39
|
+
page_object.should_receive(:ta_element).and_return(browser)
|
40
|
+
browser.should_receive(:tag_name).and_return('textarea')
|
39
41
|
page_object.populate_page_with('ta' => 'value')
|
40
42
|
end
|
41
43
|
|
@@ -77,15 +79,17 @@ describe PageObject::PagePopulator do
|
|
77
79
|
|
78
80
|
it "should not populate a checkbox if it is disabled" do
|
79
81
|
page_object.should_not_receive(:check_cb)
|
80
|
-
page_object.should_receive(:cb_element).and_return(browser)
|
82
|
+
page_object.should_receive(:cb_element).twice.and_return(browser)
|
81
83
|
browser.should_receive(:enabled?).and_return(false)
|
84
|
+
browser.should_receive(:tag_name).and_return('input')
|
82
85
|
page_object.populate_page_with('cb' => true)
|
83
86
|
end
|
84
87
|
|
85
88
|
it "should not populate a radio button when it is disabled" do
|
86
89
|
page_object.should_not_receive(:select_rb)
|
87
|
-
page_object.should_receive(:rb_element).and_return(browser)
|
90
|
+
page_object.should_receive(:rb_element).twice.and_return(browser)
|
88
91
|
browser.should_receive(:enabled?).and_return(false)
|
92
|
+
browser.should_receive(:tag_name).and_return('input')
|
89
93
|
page_object.populate_page_with('rb' => true)
|
90
94
|
end
|
91
95
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: watir-webdriver
|
16
|
-
requirement: &
|
16
|
+
requirement: &70157117515820 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,21 @@ dependencies:
|
|
21
21
|
version: 0.6.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70157117515820
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: selenium-webdriver
|
27
|
-
requirement: &
|
27
|
+
requirement: &70157117515320 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 2.22.
|
32
|
+
version: 2.22.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70157117515320
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70157117514860 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.6.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70157117514860
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cucumber
|
49
|
-
requirement: &
|
49
|
+
requirement: &70157117514400 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - <
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.2.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70157117514400
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &70157117513940 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.7.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70157117513940
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack
|
71
|
-
requirement: &
|
71
|
+
requirement: &70157117513480 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '1.0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70157117513480
|
80
80
|
description: Page Object DSL that works with both Watir and Selenium
|
81
81
|
email:
|
82
82
|
- jeff.morgan@leandog.com
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- lib/page-object/elements/unordered_list.rb
|
219
219
|
- lib/page-object/javascript/jquery.rb
|
220
220
|
- lib/page-object/javascript/prototype.rb
|
221
|
+
- lib/page-object/javascript/yui.rb
|
221
222
|
- lib/page-object/javascript_framework_facade.rb
|
222
223
|
- lib/page-object/loads_platform.rb
|
223
224
|
- lib/page-object/nested_elements.rb
|