page-object 0.1 → 0.1.1
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/.rvmrc +1 -1
- data/.travis.yml +2 -0
- data/ChangeLog +7 -0
- data/cucumber.yml +1 -1
- data/features/hidden_field.feature +0 -8
- data/features/link.feature +1 -9
- data/lib/page-object/accessors.rb +2 -2
- data/lib/page-object/elements/element.rb +4 -4
- data/lib/page-object/selenium_page_object.rb +8 -1
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +5 -5
- data/spec/page-object/elements/element_spec.rb +76 -2
- data/spec/page-object/selenium_page_object_spec.rb +28 -0
- metadata +10 -7
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.9.2
|
1
|
+
rvm 1.9.2-p290@page-object
|
data/.travis.yml
ADDED
data/ChangeLog
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
=== Version 0.1.1
|
2
|
+
* Enhancements
|
3
|
+
* Support for identifying hidden fields by text when using Selenium
|
4
|
+
* Support for identifying links by href when using Selenium
|
5
|
+
* Updated to use selenium-webdriver 2.0.1
|
6
|
+
* Updated to use watir-webdriver 0.2.6
|
7
|
+
|
1
8
|
=== Version 0.1 / 2011-07-01
|
2
9
|
* Enhancements
|
3
10
|
* Support for using multiple identifiers when locating the following element:
|
data/cucumber.yml
CHANGED
@@ -3,5 +3,5 @@ watir: DRIVER=WATIR --no-source --color --format pretty --tags ~@selenium_only
|
|
3
3
|
selenium: DRIVER=SELENIUM --no-source --color --format pretty --tags ~@watir_only
|
4
4
|
watir_focus: DRIVER=WATIR --no-source --color --format pretty --tags @focus --tags ~@selenium_only
|
5
5
|
selenium_focus: DRIVER=SELENIUM --no-source --color --format pretty --tags @focus --tags ~@watir_only
|
6
|
-
autotest: DRIVER=
|
6
|
+
autotest: DRIVER=SELENIUM features/hidden_field.feature --no-source --color --format pretty --tags ~@watir_only
|
7
7
|
|
@@ -20,14 +20,6 @@ Feature: Hidden Fields
|
|
20
20
|
| css |
|
21
21
|
| tag_name |
|
22
22
|
| index |
|
23
|
-
|
24
|
-
@watir_only
|
25
|
-
Scenario Outline: Locating hidden fields on Watir only
|
26
|
-
When I search for the hidden field by "<search_by>"
|
27
|
-
Then hidden field element should contains "12345"
|
28
|
-
|
29
|
-
Scenarios:
|
30
|
-
| search_by |
|
31
23
|
| text |
|
32
24
|
|
33
25
|
Scenario Outline: Locating a hidden field using multiple parameters
|
data/features/link.feature
CHANGED
@@ -23,16 +23,8 @@ Feature: Links
|
|
23
23
|
| link_text |
|
24
24
|
| text |
|
25
25
|
| index |
|
26
|
-
|
27
|
-
@watir_only
|
28
|
-
Scenario Outline: Locating links on Watir only
|
29
|
-
When I search for the link by "<search_by>"
|
30
|
-
Then I should be able to select the link
|
31
|
-
|
32
|
-
Scenarios:
|
33
|
-
| search_by |
|
34
26
|
| href |
|
35
|
-
|
27
|
+
|
36
28
|
Scenario: Support for multiple parameters
|
37
29
|
When I select a link labeled "Hello" and index "0"
|
38
30
|
Then the page should contain the text "Success"
|
@@ -74,7 +74,7 @@ module PageObject
|
|
74
74
|
# * :index => Watir and Selenium
|
75
75
|
# * :name => Watir and Selenium
|
76
76
|
# * :tag_name => Watir and Selenium
|
77
|
-
# * :text => Watir
|
77
|
+
# * :text => Watir and Selenium
|
78
78
|
# * :xpath => Watir and Selenium
|
79
79
|
# @param optional block to be invoked when element method is called
|
80
80
|
#
|
@@ -166,7 +166,7 @@ module PageObject
|
|
166
166
|
# @param [Hash] identifier how we find a link. You can use a multiple paramaters
|
167
167
|
# by combining of any of the following except xpath. The valid keys are:
|
168
168
|
# * :class => Watir and Selenium
|
169
|
-
# * :href => Watir
|
169
|
+
# * :href => Watir and Selenium
|
170
170
|
# * :id => Watir and Selenium
|
171
171
|
# * :index => Watir and Selenium
|
172
172
|
# * :link => Watir and Selenium
|
@@ -31,10 +31,6 @@ module PageObject
|
|
31
31
|
all_identities
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.should_build_watir_xpath identifier
|
35
|
-
['table', 'span', 'div', 'td', 'li', 'ul', 'ol'].include? identifier[:tag_name] and identifier[:name]
|
36
|
-
end
|
37
|
-
|
38
34
|
# @private
|
39
35
|
def self.selenium_identifier_for identifier
|
40
36
|
if identifier.length == 1
|
@@ -49,6 +45,10 @@ module PageObject
|
|
49
45
|
|
50
46
|
protected
|
51
47
|
|
48
|
+
def self.should_build_watir_xpath identifier
|
49
|
+
['table', 'span', 'div', 'td', 'li', 'ul', 'ol'].include? identifier[:tag_name] and identifier[:name]
|
50
|
+
end
|
51
|
+
|
52
52
|
def self.build_xpath_for identifier
|
53
53
|
tag_locator = identifier.delete(:tag_name)
|
54
54
|
idx = identifier.delete(:index)
|
@@ -423,7 +423,7 @@ module PageObject
|
|
423
423
|
private
|
424
424
|
|
425
425
|
def add_tagname_if_needed identifier, tag, additional=nil
|
426
|
-
return identifier if identifier.length < 2 and identifier
|
426
|
+
return identifier if identifier.length < 2 and supported_identifier(identifier, tag, additional)
|
427
427
|
identifier[:tag_name] = tag
|
428
428
|
if additional
|
429
429
|
additional.each do |key, value|
|
@@ -432,6 +432,13 @@ module PageObject
|
|
432
432
|
end
|
433
433
|
identifier
|
434
434
|
end
|
435
|
+
|
436
|
+
def supported_identifier(identifier, tag, additional)
|
437
|
+
return false if identifier[:index]
|
438
|
+
return false if identifier[:text] and tag == 'input' and additional[:type] == 'hidden'
|
439
|
+
return false if identifier[:href] and tag == 'a'
|
440
|
+
true
|
441
|
+
end
|
435
442
|
|
436
443
|
end
|
437
444
|
end
|
data/lib/page-object/version.rb
CHANGED
data/page-object.gemspec
CHANGED
@@ -19,11 +19,11 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency 'watir-webdriver', '>= 0.2.
|
23
|
-
s.add_dependency 'selenium-webdriver', '>= 0.
|
22
|
+
s.add_dependency 'watir-webdriver', '>= 0.2.6'
|
23
|
+
s.add_dependency 'selenium-webdriver', '>= 2.0.1'
|
24
24
|
|
25
|
-
s.add_development_dependency 'rspec', '>= 2.
|
26
|
-
s.add_development_dependency 'cucumber', '>= 0.
|
27
|
-
s.add_development_dependency 'yard', '>= 0.
|
25
|
+
s.add_development_dependency 'rspec', '>= 2.6.0'
|
26
|
+
s.add_development_dependency 'cucumber', '>= 1.0.0'
|
27
|
+
s.add_development_dependency 'yard', '>= 0.7.2'
|
28
28
|
|
29
29
|
end
|
@@ -7,8 +7,82 @@ describe PageObject::Elements::Element do
|
|
7
7
|
let(:selenium_driver) { double('selenium') }
|
8
8
|
let(:watir_element) { PageObject::Elements::Element.new(watir_driver, :platform => :watir) }
|
9
9
|
let(:selenium_element) { PageObject::Elements::Element.new(selenium_driver, :platform => :selenium) }
|
10
|
+
let(:element) {PageObject::Elements::Element}
|
10
11
|
|
11
|
-
context "
|
12
|
+
context "when building the identifiers for Watir" do
|
13
|
+
it "should build xpath when finding elements by name where not supported" do
|
14
|
+
['table', 'span', 'div', 'td', 'li', 'ol', 'ul'].each do |tag|
|
15
|
+
how = {:tag_name => tag, :name => 'blah'}
|
16
|
+
result = element.watir_identifier_for how
|
17
|
+
result[:xpath].should == ".//#{tag}[@name='blah']"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when building the identifiers for Selenium" do
|
23
|
+
def all_basic_elements
|
24
|
+
['textarea', 'select', 'a', 'div', 'span', 'table', 'td', 'img', 'form', 'li', 'ul', 'ol']
|
25
|
+
end
|
26
|
+
|
27
|
+
def all_input_elements
|
28
|
+
['text', 'hidden', 'checkbox', 'radio', 'submit']
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should build xpath when index is provided for basic elements" do
|
32
|
+
all_basic_elements.each do |tag|
|
33
|
+
identifier = {:tag_name => tag, :index => 1}
|
34
|
+
how, what = element.selenium_identifier_for identifier
|
35
|
+
how.should == :xpath
|
36
|
+
what.should == ".//#{tag}[2]"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should should build xpath when index is provided for input elements" do
|
41
|
+
all_input_elements.each do |tag|
|
42
|
+
identifier = {:tag_name => 'input', :type => tag, :index => 1}
|
43
|
+
how, what = element.selenium_identifier_for identifier
|
44
|
+
how.should == :xpath
|
45
|
+
what.should == ".//input[@type='#{tag}'][2]"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should build xpath when locating basic elements by name and index" do
|
50
|
+
all_basic_elements.each do |tag|
|
51
|
+
identifier = {:tag_name => tag, :name => 'blah', :index => 0}
|
52
|
+
how, what = element.selenium_identifier_for identifier
|
53
|
+
how.should == :xpath
|
54
|
+
what.should == ".//#{tag}[@name='blah'][1]"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should build xpath when locating input elements by name and index" do
|
59
|
+
all_input_elements.each do |type|
|
60
|
+
identifier = {:tag_name => 'input', :type => "#{type}", :name => 'blah', :index => 0}
|
61
|
+
how, what = element.selenium_identifier_for identifier
|
62
|
+
how.should == :xpath
|
63
|
+
what.should == ".//input[@type='#{type}' and @name='blah'][1]"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should build xpath when locating basic elements by name and class" do
|
68
|
+
all_basic_elements.each do |tag|
|
69
|
+
identifier = {:tag_name => tag, :name => 'foo', :class => 'bar'}
|
70
|
+
how, what = element.selenium_identifier_for identifier
|
71
|
+
how.should == :xpath
|
72
|
+
what.should == ".//#{tag}[@name='foo' and @class='bar']"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should build xpath when locating input elements by name and class" do
|
77
|
+
all_input_elements.each do |type|
|
78
|
+
identifier = {:tag_name => 'input', :type => "#{type}", :name => 'foo', :class => 'bar'}
|
79
|
+
how, what = element.selenium_identifier_for identifier
|
80
|
+
what.should == ".//input[@type='#{type}' and @name='foo' and @class='bar']"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context "when using Watir" do
|
12
86
|
it "should know when it is visible" do
|
13
87
|
watir_driver.should_receive(:present?).and_return(true)
|
14
88
|
watir_element.visible?.should == true
|
@@ -60,7 +134,7 @@ describe PageObject::Elements::Element do
|
|
60
134
|
end
|
61
135
|
end
|
62
136
|
|
63
|
-
context "
|
137
|
+
context "when using Selenium" do
|
64
138
|
it "should know when it is visible" do
|
65
139
|
selenium_driver.should_receive(:displayed?).and_return(true)
|
66
140
|
selenium_element.visible?.should == true
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'page-object/selenium_page_object'
|
3
|
+
require 'page-object/elements'
|
4
|
+
|
5
|
+
class TestPageObject
|
6
|
+
include PageObject
|
7
|
+
end
|
8
|
+
|
9
|
+
describe PageObject::SeleniumPageObject do
|
10
|
+
let(:selenium_browser) { mock_selenium_browser }
|
11
|
+
let(:selenium_page_object) { TestPageObject.new(selenium_browser) }
|
12
|
+
|
13
|
+
context "when building identifiers hash" do
|
14
|
+
it "should add tag_name when identifying by text for hidden_field" do
|
15
|
+
expected_identifier = {:text => 'foo', :tag_name => 'input', :type => 'hidden'}
|
16
|
+
PageObject::Elements::HiddenField.should_receive(:selenium_identifier_for).with(expected_identifier)
|
17
|
+
selenium_browser.should_receive(:find_element)
|
18
|
+
selenium_page_object.platform.hidden_field_for(:text => 'foo')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should add tag_name when identifying by href for anchor" do
|
22
|
+
expected_identifier = {:href => 'foo', :tag_name => 'a'}
|
23
|
+
PageObject::Elements::Link.should_receive(:selenium_identifier_for).with(expected_identifier)
|
24
|
+
selenium_browser.should_receive(:find_element)
|
25
|
+
selenium_page_object.platform.link_for(:href => 'foo')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: page-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version:
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jeff Morgan
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-16 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: watir-webdriver
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.2.
|
23
|
+
version: 0.2.6
|
24
24
|
type: :runtime
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: 2.0.1
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 2.
|
45
|
+
version: 2.6.0
|
46
46
|
type: :development
|
47
47
|
version_requirements: *id003
|
48
48
|
- !ruby/object:Gem::Dependency
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
requirements:
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.
|
56
|
+
version: 1.0.0
|
57
57
|
type: :development
|
58
58
|
version_requirements: *id004
|
59
59
|
- !ruby/object:Gem::Dependency
|
@@ -64,7 +64,7 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: 0.
|
67
|
+
version: 0.7.2
|
68
68
|
type: :development
|
69
69
|
version_requirements: *id005
|
70
70
|
description: Page Object DSL that works with both Watir and Selenium
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- .gitignore
|
81
81
|
- .rspec
|
82
82
|
- .rvmrc
|
83
|
+
- .travis.yml
|
83
84
|
- ChangeLog
|
84
85
|
- Gemfile
|
85
86
|
- LICENSE
|
@@ -183,6 +184,7 @@ files:
|
|
183
184
|
- spec/page-object/elements/unordered_list_spec.rb
|
184
185
|
- spec/page-object/page-object_spec.rb
|
185
186
|
- spec/page-object/page_factory_spec.rb
|
187
|
+
- spec/page-object/selenium_page_object_spec.rb
|
186
188
|
- spec/spec_helper.rb
|
187
189
|
homepage: http://github.com/cheezy/page-object
|
188
190
|
licenses: []
|
@@ -263,4 +265,5 @@ test_files:
|
|
263
265
|
- spec/page-object/elements/unordered_list_spec.rb
|
264
266
|
- spec/page-object/page-object_spec.rb
|
265
267
|
- spec/page-object/page_factory_spec.rb
|
268
|
+
- spec/page-object/selenium_page_object_spec.rb
|
266
269
|
- spec/spec_helper.rb
|