page-object 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/ChangeLog +9 -0
- data/features/element.feature +8 -0
- data/features/multi_elements.feature +0 -1
- data/features/step_definitions/paragraph_steps.rb +8 -0
- data/lib/page-object/accessors.rb +47 -0
- data/lib/page-object/elements/element.rb +7 -0
- data/lib/page-object/platforms/selenium_webdriver/element.rb +9 -0
- data/lib/page-object/platforms/watir_webdriver/element.rb +9 -0
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/widgets.rb +5 -1
- data/page-object.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c3bfa3ecdb6fcee1e7ba4384511ee6479e86597
|
4
|
+
data.tar.gz: 49404e73c224e8dfa6b68a3e878bce44a9e8c203
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ed2bdca4c6adc2148ee442a28ff39a8a1ffe71b2bdf2287a0fbfab78cb4250b628ca161a41d536c46b95ac8b4ba46c2340ff966f121e496ae6b94ea3a211741
|
7
|
+
data.tar.gz: db51a5b4cf3ef8598355ed6192ff71a84ce6fe452192b0b4450a53f5acf3846a8c05bf2c111d5ff5efa13b398de737475c85cc73725152d14986aafeb4db785b
|
data/.travis.yml
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== Version 0.9.3 / 2013-10-24
|
2
|
+
* Enhancements
|
3
|
+
* Added class_name method to Element
|
4
|
+
* Added select_text method to Element
|
5
|
+
* Added wait_for_expected_title and expected_element_visible methods (Thanks smartkiwi)
|
6
|
+
* Updated to use the latest selenium-webdriver 2.37.0
|
7
|
+
* Fixes
|
8
|
+
* Fixed issue with custom widgets on Ruby 1.8.7 (Thanks X Zhang)
|
9
|
+
|
1
10
|
=== Version 0.9.2 / 2013-8-23
|
2
11
|
* Enhancements
|
3
12
|
* Added elements method to accessor so one can gen methods for generic collections of elements
|
data/features/element.feature
CHANGED
@@ -313,3 +313,11 @@ Feature: Elements
|
|
313
313
|
Scenario: Accessing an HTML 5 element using the element method
|
314
314
|
When I retrieve the figure using the element
|
315
315
|
Then I should see the figure contains an image
|
316
|
+
|
317
|
+
Scenario: Getting the class name for an element
|
318
|
+
When I search for the paragraph by "id"
|
319
|
+
Then I should know the paragraph class is "p_class"
|
320
|
+
|
321
|
+
@focus
|
322
|
+
Scenario: Selecting the text for an element
|
323
|
+
Then I should be able to select "Elements" from the paragraph
|
@@ -478,7 +478,6 @@ Feature: Multi Elements
|
|
478
478
|
And the title for file field 2 should be "File Field 2"
|
479
479
|
And the title for file field 3 should be "File Field 3"
|
480
480
|
|
481
|
-
@focus
|
482
481
|
Scenario: Selecting multple generic element types
|
483
482
|
When I select the multiple elements with a tag label
|
484
483
|
Then I should have 3 labels
|
@@ -18,3 +18,11 @@ end
|
|
18
18
|
Then /^I should see that the paragraph exists$/ do
|
19
19
|
@page.p_id?.should == true
|
20
20
|
end
|
21
|
+
|
22
|
+
Then(/^I should know the paragraph class is "(.*?)"$/) do |class_name|
|
23
|
+
@page.p_id_element.class_name.should == class_name
|
24
|
+
end
|
25
|
+
|
26
|
+
Then(/^I should be able to select "(.*?)" from the paragraph$/) do |text|
|
27
|
+
@page.p_id_element.select_text text
|
28
|
+
end
|
@@ -48,6 +48,34 @@ module PageObject
|
|
48
48
|
end
|
49
49
|
alias_method :direct_url, :page_url
|
50
50
|
|
51
|
+
#
|
52
|
+
# Creates a method that waits the expected_title of a page to match the actual.
|
53
|
+
# @param [String] expected_title the literal expected title for the page
|
54
|
+
# @param [Regexp] expected_title the expected title pattern for the page
|
55
|
+
# @param [optional, Integer] timeout default value is nil - do not wait
|
56
|
+
# @return [boolean]
|
57
|
+
# @raise An exception if expected_title does not match actual title
|
58
|
+
#
|
59
|
+
# @example Specify 'Google' as the expected title of a page
|
60
|
+
# expected_title "Google"
|
61
|
+
# page.has_expected_title?
|
62
|
+
#
|
63
|
+
def wait_for_expected_title(expected_title, timeout=::PageObject.default_element_wait)
|
64
|
+
define_method("wait_for_expected_title?") do
|
65
|
+
page_title = title
|
66
|
+
has_expected_title = (expected_title === page_title)
|
67
|
+
if not has_expected_title and not timeout.nil?
|
68
|
+
wait_until(timeout, "Expected title '#{expected_title}' instead of '#{page_title}'") do
|
69
|
+
has_expected_title = (expected_title === page_title)
|
70
|
+
has_expected_title
|
71
|
+
end
|
72
|
+
end
|
73
|
+
raise "Expected title '#{expected_title}' instead of '#{page_title}'" unless has_expected_title
|
74
|
+
has_expected_title
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
|
51
79
|
#
|
52
80
|
# Creates a method that compares the expected_title of a page against the actual.
|
53
81
|
# @param [String] expected_title the literal expected title for the page
|
@@ -85,6 +113,25 @@ module PageObject
|
|
85
113
|
end
|
86
114
|
end
|
87
115
|
|
116
|
+
#
|
117
|
+
# Creates a method that provides a way to initialize a page based upon an expected element to become visible.
|
118
|
+
# This is useful for pages that load dynamic content and might have hidden elements that are not shown.
|
119
|
+
# @param [Symbol] the name given to the element in the declaration
|
120
|
+
# @param [optional, Integer] timeout default value is 5 seconds
|
121
|
+
# @param [optional, boolean] also check that element to be visible if set to true
|
122
|
+
# @return [boolean]
|
123
|
+
#
|
124
|
+
# @example Specify a text box named :address expected on the page within 10 seconds
|
125
|
+
# expected_element_visible(:address, 10)
|
126
|
+
# page.has_expected_element_visible?
|
127
|
+
#
|
128
|
+
def expected_element_visible(element_name, timeout=::PageObject.default_element_wait, check_visible=false)
|
129
|
+
define_method("has_expected_element_visible?") do
|
130
|
+
self.respond_to? "#{element_name}_element" and self.send("#{element_name}_element").when_present timeout
|
131
|
+
self.respond_to? "#{element_name}_element" and self.send("#{element_name}_element").when_visible timeout
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
88
135
|
#
|
89
136
|
# Identify an element as existing within a frame or iframe. A frame parameter
|
90
137
|
# is passed to the block and must be passed to the other calls to PageObject.
|
@@ -52,6 +52,13 @@ module PageObject
|
|
52
52
|
element.inspect
|
53
53
|
end
|
54
54
|
|
55
|
+
#
|
56
|
+
# retrieve the class name for an element
|
57
|
+
#
|
58
|
+
def class_name
|
59
|
+
attribute 'class'
|
60
|
+
end
|
61
|
+
|
55
62
|
# @private
|
56
63
|
def self.watir_identifier_for identifier
|
57
64
|
if should_build_watir_xpath(identifier)
|
@@ -156,6 +156,15 @@ module PageObject
|
|
156
156
|
bridge.executeScript("return arguments[0].focus()", element)
|
157
157
|
end
|
158
158
|
|
159
|
+
#
|
160
|
+
# Select the provided text
|
161
|
+
#
|
162
|
+
def select_text(text)
|
163
|
+
Watir::Atoms.load(:selectText)
|
164
|
+
script = "return (%s).apply(null, arguments)" % ATOMS.fetch(:selectText)
|
165
|
+
bridge.executeScript(script, element, text)
|
166
|
+
end
|
167
|
+
|
159
168
|
#
|
160
169
|
# Click this element
|
161
170
|
#
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'watir-webdriver/extensions/select_text'
|
2
|
+
|
1
3
|
module PageObject
|
2
4
|
module Platforms
|
3
5
|
#
|
@@ -141,6 +143,13 @@ module PageObject
|
|
141
143
|
def focus
|
142
144
|
element.focus
|
143
145
|
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Select the provided text
|
149
|
+
#
|
150
|
+
def select_text(text)
|
151
|
+
element.select_text text
|
152
|
+
end
|
144
153
|
|
145
154
|
#
|
146
155
|
# Waits until the element is present
|
data/lib/page-object/version.rb
CHANGED
data/lib/page-object/widgets.rb
CHANGED
@@ -29,7 +29,11 @@ module PageObject
|
|
29
29
|
|
30
30
|
def self.define_accessors(base, widget_tag, widget_class)
|
31
31
|
accessors_module = Module.new do
|
32
|
-
define_method widget_tag do |name,
|
32
|
+
define_method widget_tag do |name, *identifier_args, &block|
|
33
|
+
|
34
|
+
identifier = identifier_args.first
|
35
|
+
identifier = {:index => 0} if identifier.nil?
|
36
|
+
|
33
37
|
define_method("#{name}_element") do
|
34
38
|
return call_block(&block) if block
|
35
39
|
platform.send("#{widget_tag}_for", identifier.clone)
|
data/page-object.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
|
23
23
|
s.add_dependency 'watir-webdriver', '>= 0.6.4'
|
24
|
-
s.add_dependency 'selenium-webdriver', '>= 2.
|
24
|
+
s.add_dependency 'selenium-webdriver', '>= 2.37.0'
|
25
25
|
s.add_dependency 'page_navigation', '>= 0.8'
|
26
26
|
|
27
27
|
s.add_development_dependency 'rspec', '>= 2.12.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: page-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Morgan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: watir-webdriver
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.37.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.
|
40
|
+
version: 2.37.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: page_navigation
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|