page-object 2.2 → 2.2.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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -12
- data/ChangeLog +7 -0
- data/lib/page-object.rb +1 -1
- data/lib/page-object/elements/area.rb +0 -22
- data/lib/page-object/elements/audio.rb +1 -1
- data/lib/page-object/elements/bold.rb +0 -1
- data/lib/page-object/elements/button.rb +0 -1
- data/lib/page-object/elements/canvas.rb +1 -2
- data/lib/page-object/elements/check_box.rb +0 -22
- data/lib/page-object/elements/div.rb +1 -0
- data/lib/page-object/elements/element.rb +5 -104
- data/lib/page-object/elements/file_field.rb +0 -9
- data/lib/page-object/elements/form.rb +0 -1
- data/lib/page-object/elements/heading.rb +0 -1
- data/lib/page-object/elements/hidden_field.rb +0 -4
- data/lib/page-object/elements/image.rb +0 -14
- data/lib/page-object/elements/italic.rb +0 -2
- data/lib/page-object/elements/link.rb +0 -2
- data/lib/page-object/elements/list_item.rb +0 -1
- data/lib/page-object/elements/media.rb +0 -34
- data/lib/page-object/elements/option.rb +0 -1
- data/lib/page-object/elements/ordered_list.rb +6 -19
- data/lib/page-object/elements/radio_button.rb +0 -15
- data/lib/page-object/elements/select_list.rb +2 -17
- data/lib/page-object/elements/span.rb +0 -1
- data/lib/page-object/elements/table.rb +18 -37
- data/lib/page-object/elements/table_cell.rb +0 -8
- data/lib/page-object/elements/table_row.rb +14 -24
- data/lib/page-object/elements/text_area.rb +0 -9
- data/lib/page-object/elements/text_field.rb +0 -8
- data/lib/page-object/elements/unordered_list.rb +6 -22
- data/lib/page-object/elements/video.rb +1 -0
- data/lib/page-object/page_populator.rb +5 -8
- data/lib/page-object/platforms/watir.rb +2 -2
- data/lib/page-object/platforms/watir/page_object.rb +1 -2
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +2 -1
- metadata +18 -5
- data/lib/page-object/core_ext/string.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed39bfdc657310a484fdead50fb7a3d060358a48
|
4
|
+
data.tar.gz: 50e8d4e3a1c2669e0c2e3709372ae1c4422aa701
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79ca96731f54acc6e6bda50b0f6aea7b7a1d1ca830eb7ebdd0f2bd6625779bdf55a210d8ca80e5f3be2d860c9f821042e7284e33959f090247f28d38e1963257
|
7
|
+
data.tar.gz: f7ffaa56092110c6f7abe3a2a30fa39157ba71fc001b56c428a5d2f9d8453c8059f54a8a80ea8ce89423bc7e8417b925042960869c132cb5f924ec0450d854d6
|
data/.travis.yml
CHANGED
@@ -1,22 +1,15 @@
|
|
1
1
|
sudo: required
|
2
2
|
dist: trusty
|
3
3
|
rvm:
|
4
|
-
- 2.2.
|
5
|
-
- 2.3.
|
4
|
+
- 2.2.7
|
5
|
+
- 2.3.4
|
6
|
+
- 2.4.1
|
6
7
|
cache: bundler
|
8
|
+
addons:
|
9
|
+
chrome: stable
|
7
10
|
before_script:
|
8
|
-
- export CHROME_BIN=/usr/bin/google-chrome
|
9
11
|
- export DISPLAY=:99.0
|
10
12
|
- sh -e /etc/init.d/xvfb start
|
11
|
-
- sudo apt-get update
|
12
|
-
- sudo apt-get install -y libappindicator1 fonts-liberation
|
13
|
-
- wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
14
|
-
- sudo dpkg -i google-chrome*.deb
|
15
|
-
- CHROMEDRIVER_VERSION=$(curl -s http://chromedriver.storage.googleapis.com/LATEST_RELEASE)
|
16
|
-
- curl -L -O "http://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"
|
17
|
-
- unzip chromedriver_linux64.zip
|
18
|
-
- chmod +x chromedriver
|
19
|
-
- sudo mv chromedriver /usr/local/bin
|
20
13
|
|
21
14
|
script: bundle exec rake $RAKE_TASK
|
22
15
|
env:
|
data/ChangeLog
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
Version 2.2.1 / 2017-9-22
|
2
|
+
* Enhancements
|
3
|
+
* Moved some functionality from PageObject to Watir (Thanks Titus Fortner)
|
4
|
+
* Fixes
|
5
|
+
* Fixed bug when selection option by text with populate_page_with (Thanks Jason Phebus)
|
6
|
+
* Fixed issue with wrapping the Selenium driver with Watir (Thanks Titus Fortner)
|
7
|
+
|
1
8
|
Version 2.2 / 2017-8-4
|
2
9
|
* Enhancements
|
3
10
|
* when_visible and when_not_visible now wait for element to be present before checking
|
data/lib/page-object.rb
CHANGED
@@ -76,7 +76,7 @@ module PageObject
|
|
76
76
|
def initialize_browser(root)
|
77
77
|
@root_element = PageObject::Platforms::Watir.root_element_for root
|
78
78
|
@browser = root
|
79
|
-
@platform = PageObject::Platforms::Watir
|
79
|
+
@platform = PageObject::Platforms::Watir.create_page_object @browser
|
80
80
|
end
|
81
81
|
|
82
82
|
# @private
|
@@ -1,29 +1,7 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class Area < Element
|
5
4
|
|
6
|
-
#
|
7
|
-
# return the coordinates of the area
|
8
|
-
#
|
9
|
-
def coords
|
10
|
-
attribute(:coords)
|
11
|
-
end
|
12
|
-
|
13
|
-
#
|
14
|
-
# return the shape of the area
|
15
|
-
#
|
16
|
-
def shape
|
17
|
-
attribute(:shape)
|
18
|
-
end
|
19
|
-
|
20
|
-
#
|
21
|
-
# return the href of the area
|
22
|
-
#
|
23
|
-
def href
|
24
|
-
attribute(:href)
|
25
|
-
end
|
26
|
-
|
27
5
|
end
|
28
6
|
|
29
7
|
::PageObject::Elements.type_to_class[:area] = ::PageObject::Elements::Area
|
@@ -2,30 +2,8 @@ module PageObject
|
|
2
2
|
module Elements
|
3
3
|
class CheckBox < Element
|
4
4
|
|
5
|
-
#
|
6
|
-
# check the checkbox
|
7
|
-
#
|
8
|
-
def check
|
9
|
-
element.set
|
10
|
-
end
|
11
|
-
|
12
|
-
#
|
13
|
-
# uncheck the checkbox
|
14
|
-
#
|
15
|
-
def uncheck
|
16
|
-
element.clear
|
17
|
-
end
|
18
|
-
|
19
|
-
#
|
20
|
-
# return true if checkbox is checked
|
21
|
-
#
|
22
|
-
def checked?
|
23
|
-
element.set?
|
24
|
-
end
|
25
|
-
|
26
5
|
end
|
27
6
|
|
28
7
|
::PageObject::Elements.type_to_class[:checkbox] = ::PageObject::Elements::CheckBox
|
29
|
-
|
30
8
|
end
|
31
9
|
end
|
@@ -25,18 +25,6 @@ module PageObject
|
|
25
25
|
not enabled?
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
def inspect
|
30
|
-
element.inspect
|
31
|
-
end
|
32
|
-
|
33
|
-
#
|
34
|
-
# retrieve the class name for an element
|
35
|
-
#
|
36
|
-
def class_name
|
37
|
-
attribute 'class'
|
38
|
-
end
|
39
|
-
|
40
28
|
#
|
41
29
|
# specify plural form of element
|
42
30
|
#
|
@@ -70,13 +58,6 @@ module PageObject
|
|
70
58
|
end
|
71
59
|
end
|
72
60
|
|
73
|
-
#
|
74
|
-
# return true if an element is visible
|
75
|
-
#
|
76
|
-
# def visible?
|
77
|
-
# element.present?
|
78
|
-
# end
|
79
|
-
|
80
61
|
#
|
81
62
|
# compare this element to another to determine if they are equal
|
82
63
|
#
|
@@ -84,48 +65,14 @@ module PageObject
|
|
84
65
|
other.is_a? self.class and element == other.element
|
85
66
|
end
|
86
67
|
|
87
|
-
#
|
88
|
-
# Get the value of a the given attribute of the element. Will
|
89
|
-
# return the current value, even if this has been modified
|
90
|
-
# after the page has been loaded. More exactly, this method
|
91
|
-
# will return the value of the given attribute, unless that
|
92
|
-
# attribute is not present, in which case the value of the
|
93
|
-
# property with the same name is returned. If neither value is
|
94
|
-
# set, nil is returned. The "style" attribute is converted as
|
95
|
-
# best can be to a text representation with a trailing
|
96
|
-
# semi-colon. The following are deemed to be "boolean"
|
97
|
-
# attributes, and will return either "true" or "false":
|
98
|
-
#
|
99
|
-
# async, autofocus, autoplay, checked, compact, complete,
|
100
|
-
# controls, declare, defaultchecked, defaultselected, defer,
|
101
|
-
# disabled, draggable, ended, formnovalidate, hidden, indeterminate,
|
102
|
-
# iscontenteditable, ismap, itemscope, loop, multiple, muted,
|
103
|
-
# nohref, noresize, noshade, novalidate, nowrap, open, paused,
|
104
|
-
# pubdate, readonly, required, reversed, scoped, seamless, seeking,
|
105
|
-
# selected, spellcheck, truespeed, willvalidate
|
106
|
-
#
|
107
|
-
# Finally, the following commonly mis-capitalized
|
108
|
-
# attribute/property names are evaluated as expected:
|
109
|
-
#
|
110
|
-
# class, readonly
|
111
|
-
#
|
112
|
-
# @param [String]
|
113
|
-
# attribute name
|
114
|
-
# @return [String,nil]
|
115
|
-
# attribute value
|
116
|
-
#
|
117
|
-
def attribute(attribute_name)
|
118
|
-
element.attribute_value attribute_name
|
119
|
-
end
|
120
|
-
|
121
68
|
#
|
122
69
|
# find the parent element
|
123
70
|
#
|
124
|
-
def parent
|
125
|
-
parent = element.parent
|
71
|
+
def parent(opt = {})
|
72
|
+
parent = element.parent(opt)
|
126
73
|
type = element.type if parent.tag_name.to_sym == :input
|
127
74
|
cls = ::PageObject::Elements.element_class_for(parent.tag_name, type)
|
128
|
-
cls.new(parent)
|
75
|
+
cls.new(parent.to_subtype)
|
129
76
|
end
|
130
77
|
|
131
78
|
#
|
@@ -180,48 +127,8 @@ module PageObject
|
|
180
127
|
element.wait_until(timeout: timeout, message: message, &block)
|
181
128
|
end
|
182
129
|
|
183
|
-
|
184
|
-
|
185
|
-
#
|
186
|
-
def scroll_into_view
|
187
|
-
element.wd.location_once_scrolled_into_view
|
188
|
-
end
|
189
|
-
|
190
|
-
#
|
191
|
-
# location of element (x, y)
|
192
|
-
#
|
193
|
-
def location
|
194
|
-
element.wd.location
|
195
|
-
end
|
196
|
-
|
197
|
-
#
|
198
|
-
# size of element (width, height)
|
199
|
-
#
|
200
|
-
def size
|
201
|
-
element.wd.size
|
202
|
-
end
|
203
|
-
|
204
|
-
#
|
205
|
-
# Get height of element
|
206
|
-
#
|
207
|
-
def height
|
208
|
-
element.wd.size['height']
|
209
|
-
end
|
210
|
-
|
211
|
-
#
|
212
|
-
# Get width of element
|
213
|
-
#
|
214
|
-
def width
|
215
|
-
element.wd.size['width']
|
216
|
-
end
|
217
|
-
|
218
|
-
#
|
219
|
-
# Get centre coordinates of element
|
220
|
-
#
|
221
|
-
def centre
|
222
|
-
location = element.wd.location
|
223
|
-
size = element.wd.size
|
224
|
-
{'y' => (location['y'] + (size['height']/2)), 'x' => (location['x'] + (size['width']/2))}
|
130
|
+
def name
|
131
|
+
element.attribute(:name)
|
225
132
|
end
|
226
133
|
|
227
134
|
# @private
|
@@ -235,12 +142,6 @@ module PageObject
|
|
235
142
|
element.respond_to?(m) || super
|
236
143
|
end
|
237
144
|
|
238
|
-
protected
|
239
|
-
|
240
|
-
def to_ary
|
241
|
-
nil
|
242
|
-
end
|
243
|
-
|
244
145
|
private
|
245
146
|
|
246
147
|
def timed_loop(timeout)
|
@@ -1,18 +1,9 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class FileField < Element
|
5
4
|
|
6
|
-
#
|
7
|
-
# Set the value of the FileField
|
8
|
-
#
|
9
|
-
def value=(new_value)
|
10
|
-
element.set(new_value)
|
11
|
-
end
|
12
|
-
|
13
5
|
end
|
14
6
|
|
15
7
|
::PageObject::Elements.type_to_class[:file] = ::PageObject::Elements::FileField
|
16
|
-
|
17
8
|
end
|
18
9
|
end
|
@@ -10,6 +10,5 @@ module PageObject
|
|
10
10
|
::PageObject::Elements.tag_to_class[:h4] = ::PageObject::Elements::Heading
|
11
11
|
::PageObject::Elements.tag_to_class[:h5] = ::PageObject::Elements::Heading
|
12
12
|
::PageObject::Elements.tag_to_class[:h6] = ::PageObject::Elements::Heading
|
13
|
-
|
14
13
|
end
|
15
14
|
end
|
@@ -2,20 +2,6 @@ module PageObject
|
|
2
2
|
module Elements
|
3
3
|
class Image < Element
|
4
4
|
|
5
|
-
#
|
6
|
-
# Return the width of the image.
|
7
|
-
#
|
8
|
-
def width
|
9
|
-
element.width
|
10
|
-
end
|
11
|
-
|
12
|
-
#
|
13
|
-
# Return the height of the image
|
14
|
-
#
|
15
|
-
def height
|
16
|
-
element.height
|
17
|
-
end
|
18
|
-
|
19
5
|
end
|
20
6
|
|
21
7
|
::PageObject::Elements.tag_to_class[:img] = ::PageObject::Elements::Image
|
@@ -1,45 +1,11 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class Media < Element
|
5
4
|
|
6
|
-
def autoplay?
|
7
|
-
attribute(:autoplay)
|
8
|
-
end
|
9
|
-
|
10
5
|
def has_controls?
|
11
6
|
attribute(:controls)
|
12
7
|
end
|
13
8
|
|
14
|
-
def paused?
|
15
|
-
attribute(:paused)
|
16
|
-
end
|
17
|
-
|
18
|
-
def duration
|
19
|
-
duration = attribute(:duration)
|
20
|
-
return duration.to_f if duration
|
21
|
-
end
|
22
|
-
|
23
|
-
def volume
|
24
|
-
volume = attribute(:volume)
|
25
|
-
return volume.to_i if volume
|
26
|
-
end
|
27
|
-
|
28
|
-
def ended?
|
29
|
-
attribute(:ended)
|
30
|
-
end
|
31
|
-
|
32
|
-
def seeking?
|
33
|
-
attribute(:seeking)
|
34
|
-
end
|
35
|
-
|
36
|
-
def loop?
|
37
|
-
attribute(:loop)
|
38
|
-
end
|
39
|
-
|
40
|
-
def muted?
|
41
|
-
attribute(:muted)
|
42
|
-
end
|
43
9
|
end
|
44
10
|
end
|
45
11
|
end
|
@@ -9,10 +9,8 @@ module PageObject
|
|
9
9
|
#
|
10
10
|
# @return [PageObject::Elements::ListItem]
|
11
11
|
#
|
12
|
-
def each
|
13
|
-
|
14
|
-
yield self[index-1]
|
15
|
-
end
|
12
|
+
def each(&block)
|
13
|
+
list_items.each(&block)
|
16
14
|
end
|
17
15
|
|
18
16
|
#
|
@@ -22,35 +20,24 @@ module PageObject
|
|
22
20
|
# @return [PageObject::Elements::ListItem]
|
23
21
|
#
|
24
22
|
def [](idx)
|
25
|
-
|
23
|
+
list_items[idx]
|
26
24
|
end
|
27
25
|
|
28
26
|
#
|
29
27
|
# Return the number of items contained in the ordered list
|
30
28
|
#
|
31
29
|
def items
|
32
|
-
|
30
|
+
list_items.size
|
33
31
|
end
|
34
32
|
|
35
33
|
#
|
36
|
-
# Return
|
34
|
+
# Return Array of ListItem objects that are children of the OrderedList
|
37
35
|
#
|
38
36
|
def list_items
|
39
|
-
children.
|
37
|
+
@list_items ||= children(tag_name: 'li').map do |obj|
|
40
38
|
Object::PageObject::Elements::ListItem.new(obj)
|
41
39
|
end
|
42
40
|
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
|
46
|
-
def children
|
47
|
-
element.ols(:xpath => child_xpath)
|
48
|
-
end
|
49
|
-
|
50
|
-
def child_xpath
|
51
|
-
"./child::li"
|
52
|
-
end
|
53
|
-
|
54
41
|
end
|
55
42
|
|
56
43
|
::PageObject::Elements.tag_to_class[:ol] = ::PageObject::Elements::OrderedList
|
@@ -1,22 +1,7 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class RadioButton < Element
|
5
4
|
|
6
|
-
#
|
7
|
-
# select the radiobutton
|
8
|
-
#
|
9
|
-
def select
|
10
|
-
element.set
|
11
|
-
end
|
12
|
-
|
13
|
-
#
|
14
|
-
# return if it is selected
|
15
|
-
#
|
16
|
-
def selected?
|
17
|
-
element.set?
|
18
|
-
end
|
19
|
-
|
20
5
|
end
|
21
6
|
|
22
7
|
::PageObject::Elements.type_to_class[:radio] = ::PageObject::Elements::RadioButton
|
@@ -25,29 +25,14 @@ module PageObject
|
|
25
25
|
# @return [Array<String>] An array of strings representing the text of the currently selected options.
|
26
26
|
#
|
27
27
|
def selected_options
|
28
|
-
element.selected_options.map
|
28
|
+
element.selected_options.map(&:text).compact
|
29
29
|
end
|
30
30
|
|
31
31
|
#
|
32
32
|
# @return [Array<String>] An array of strings representing the value of the currently selected options.
|
33
33
|
#
|
34
34
|
def selected_values
|
35
|
-
element.selected_options.map
|
36
|
-
end
|
37
|
-
|
38
|
-
#
|
39
|
-
# Returns true if the select list has one or more options where text or label matches the given value.
|
40
|
-
#
|
41
|
-
# @param [String, Regexp] value A value.
|
42
|
-
# @return [Boolean]
|
43
|
-
def include?(value)
|
44
|
-
element.include? value
|
45
|
-
end
|
46
|
-
|
47
|
-
protected
|
48
|
-
|
49
|
-
def child_xpath
|
50
|
-
".//child::option"
|
35
|
+
element.selected_options.map(&:value).compact
|
51
36
|
end
|
52
37
|
|
53
38
|
end
|
@@ -8,20 +8,11 @@ module PageObject
|
|
8
8
|
#
|
9
9
|
# @return [PageObject::Elements::TableRow]
|
10
10
|
#
|
11
|
-
def each
|
12
|
-
|
13
|
-
yield self[index-1]
|
14
|
-
end
|
11
|
+
def each(&block)
|
12
|
+
row_items.each(&block)
|
15
13
|
end
|
16
14
|
|
17
|
-
|
18
|
-
# return the first row
|
19
|
-
#
|
20
|
-
# @return PageObject::Elements::TableRow
|
21
|
-
#
|
22
|
-
def first_row
|
23
|
-
self[0]
|
24
|
-
end
|
15
|
+
alias_method :first_row, :first
|
25
16
|
|
26
17
|
#
|
27
18
|
# return the last row
|
@@ -32,18 +23,6 @@ module PageObject
|
|
32
23
|
self[-1]
|
33
24
|
end
|
34
25
|
|
35
|
-
#
|
36
|
-
# return the table as hashes
|
37
|
-
#
|
38
|
-
# @return Hash
|
39
|
-
#
|
40
|
-
def hashes
|
41
|
-
headers = self.first_row.map(&:text)
|
42
|
-
self.entries[1..-1].map do |row|
|
43
|
-
Hash[headers.zip(row.map(&:text))]
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
26
|
#
|
48
27
|
# Return the PageObject::Elements::TableRow for the index provided. Index
|
49
28
|
# is zero based. If the index provided is a String then it
|
@@ -51,35 +30,37 @@ module PageObject
|
|
51
30
|
#
|
52
31
|
# @return [PageObject::Elements::TableRow]
|
53
32
|
#
|
54
|
-
def [](
|
55
|
-
idx =
|
56
|
-
|
57
|
-
initialize_row(element[idx])
|
33
|
+
def [](what)
|
34
|
+
idx = find_index(what)
|
35
|
+
idx && row_items[idx]
|
58
36
|
end
|
59
37
|
|
60
38
|
#
|
61
39
|
# Returns the number of rows in the table.
|
62
40
|
#
|
63
41
|
def rows
|
64
|
-
|
42
|
+
row_items.size
|
65
43
|
end
|
66
44
|
|
67
45
|
protected
|
68
46
|
|
69
|
-
def
|
70
|
-
|
47
|
+
def row_items
|
48
|
+
meth = strategy == :descendants ? :trs : :rows
|
49
|
+
@row_items ||= element.send(meth).map do |obj|
|
50
|
+
::PageObject::Elements::TableRow.new(obj)
|
51
|
+
end
|
71
52
|
end
|
72
53
|
|
73
|
-
def
|
74
|
-
|
54
|
+
def strategy
|
55
|
+
:children
|
75
56
|
end
|
76
57
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
58
|
+
def find_index(what)
|
59
|
+
return what if what.is_a? Integer
|
60
|
+
row_items.find_index do |row|
|
61
|
+
row.cell(text: /#{what}/).exist?
|
80
62
|
end
|
81
63
|
end
|
82
|
-
|
83
64
|
end
|
84
65
|
|
85
66
|
::PageObject::Elements.tag_to_class[:table] = ::PageObject::Elements::Table
|
@@ -2,17 +2,9 @@ module PageObject
|
|
2
2
|
module Elements
|
3
3
|
class TableCell < Element
|
4
4
|
|
5
|
-
#
|
6
|
-
# return true if the element is enabled
|
7
|
-
#
|
8
|
-
def enabled?
|
9
|
-
true
|
10
|
-
end
|
11
|
-
|
12
5
|
end
|
13
6
|
|
14
7
|
::PageObject::Elements.tag_to_class[:td] = ::PageObject::Elements::TableCell
|
15
8
|
::PageObject::Elements.tag_to_class[:th] = ::PageObject::Elements::TableCell
|
16
|
-
|
17
9
|
end
|
18
10
|
end
|
@@ -8,12 +8,8 @@ module PageObject
|
|
8
8
|
#
|
9
9
|
# iterator that yields with a PageObject::Elements::TableCell
|
10
10
|
#
|
11
|
-
|
12
|
-
|
13
|
-
def each
|
14
|
-
for index in 1..self.columns do
|
15
|
-
yield self[index-1]
|
16
|
-
end
|
11
|
+
def each(&block)
|
12
|
+
cell_items.each(&block)
|
17
13
|
end
|
18
14
|
|
19
15
|
#
|
@@ -22,39 +18,33 @@ module PageObject
|
|
22
18
|
# will be matched with the text from the columns in the first row.
|
23
19
|
# The text can be a substring of the full column text.
|
24
20
|
#
|
25
|
-
def [](
|
26
|
-
idx =
|
27
|
-
|
28
|
-
initialize_cell(element[idx])
|
21
|
+
def [](what)
|
22
|
+
idx = find_index(what)
|
23
|
+
idx && cell_items[idx]
|
29
24
|
end
|
30
25
|
|
31
26
|
#
|
32
27
|
# Returns the number of columns in the table.
|
33
28
|
#
|
34
29
|
def columns
|
35
|
-
|
30
|
+
cell_items.size
|
36
31
|
end
|
37
32
|
|
38
33
|
protected
|
39
34
|
|
40
|
-
def
|
41
|
-
|
35
|
+
def cell_items
|
36
|
+
@cell_items ||= element.cells.map do |obj|
|
37
|
+
::PageObject::Elements::TableCell.new(obj)
|
38
|
+
end
|
42
39
|
end
|
43
40
|
|
44
|
-
def
|
45
|
-
|
46
|
-
end
|
41
|
+
def find_index(what)
|
42
|
+
return what if what.is_a? Integer
|
47
43
|
|
48
|
-
|
49
|
-
|
50
|
-
table = table.parent if table.tag_name == 'tbody'
|
51
|
-
if table.instance_of? Watir::HTMLElement
|
52
|
-
table = table.to_subtype
|
44
|
+
parent(tag_name: 'table').headers.find_index do |header|
|
45
|
+
header.text.include? what
|
53
46
|
end
|
54
|
-
first_row = table[0]
|
55
|
-
first_row.cells.find_index {|column| column.text.include? title }
|
56
47
|
end
|
57
|
-
|
58
48
|
end
|
59
49
|
|
60
50
|
::PageObject::Elements.tag_to_class[:tr] = ::PageObject::Elements::TableRow
|
@@ -1,18 +1,9 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class TextArea < Element
|
5
4
|
|
6
|
-
#
|
7
|
-
# Set the value of the TextArea
|
8
|
-
#
|
9
|
-
def value=(new_value)
|
10
|
-
element.set(new_value)
|
11
|
-
end
|
12
|
-
|
13
5
|
end
|
14
6
|
|
15
7
|
::PageObject::Elements.tag_to_class[:textarea] = ::PageObject::Elements::TextArea
|
16
|
-
|
17
8
|
end
|
18
9
|
end
|
@@ -1,15 +1,7 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class TextField < Element
|
5
4
|
|
6
|
-
#
|
7
|
-
# Set the value of the TextField
|
8
|
-
#
|
9
|
-
def value=(new_value)
|
10
|
-
element.set(new_value)
|
11
|
-
end
|
12
|
-
|
13
5
|
end
|
14
6
|
|
15
7
|
::PageObject::Elements.type_to_class[:text] = ::PageObject::Elements::TextField
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class UnorderedList < Element
|
@@ -9,10 +8,8 @@ module PageObject
|
|
9
8
|
#
|
10
9
|
# @return [PageObject::Elements::ListItem]
|
11
10
|
#
|
12
|
-
def each
|
13
|
-
|
14
|
-
yield self[index-1]
|
15
|
-
end
|
11
|
+
def each(&block)
|
12
|
+
list_items.each(&block)
|
16
13
|
end
|
17
14
|
|
18
15
|
#
|
@@ -22,39 +19,26 @@ module PageObject
|
|
22
19
|
# @return [PageObject::Elements::ListItem]
|
23
20
|
#
|
24
21
|
def [](idx)
|
25
|
-
|
22
|
+
list_items[idx]
|
26
23
|
end
|
27
24
|
|
28
25
|
#
|
29
26
|
# Return the number of items contained in the unordered list
|
30
27
|
#
|
31
28
|
def items
|
32
|
-
|
29
|
+
list_items.size
|
33
30
|
end
|
34
31
|
|
35
32
|
#
|
36
|
-
# Return
|
37
|
-
# UnorderedList
|
33
|
+
# Return Array of ListItem objects that are children of the UnorderedList
|
38
34
|
#
|
39
35
|
def list_items
|
40
|
-
children.
|
36
|
+
@list_items ||= children(tag_name: 'li').map do |obj|
|
41
37
|
Object::PageObject::Elements::ListItem.new(obj)
|
42
38
|
end
|
43
39
|
end
|
44
|
-
|
45
|
-
protected
|
46
|
-
|
47
|
-
def child_xpath
|
48
|
-
"./child::li"
|
49
|
-
end
|
50
|
-
|
51
|
-
def children
|
52
|
-
element.uls(:xpath => child_xpath)
|
53
|
-
end
|
54
|
-
|
55
40
|
end
|
56
41
|
|
57
42
|
::PageObject::Elements.tag_to_class[:ul] = ::PageObject::Elements::UnorderedList
|
58
|
-
|
59
43
|
end
|
60
44
|
end
|
@@ -8,7 +8,7 @@ module PageObject
|
|
8
8
|
# matching the Hash key to the name you provided when declaring
|
9
9
|
# the element on your page.
|
10
10
|
#
|
11
|
-
#
|
11
|
+
# Checkbox and Radio Button values must be true or false.
|
12
12
|
#
|
13
13
|
# @example
|
14
14
|
# class ExamplePage
|
@@ -24,7 +24,7 @@ module PageObject
|
|
24
24
|
# example_page = ExamplePage.new(@browser)
|
25
25
|
# example_page.populate_page_with :username => 'a name', :active => true
|
26
26
|
#
|
27
|
-
# @param [Hash] the data to use to populate this page. The key
|
27
|
+
# @param data [Hash] the data to use to populate this page. The key
|
28
28
|
# can be either a string or a symbol. The value must be a string
|
29
29
|
# for TextField, TextArea, SelectList, and FileField and must be true or
|
30
30
|
# false for a Checkbox or RadioButton.
|
@@ -58,13 +58,10 @@ module PageObject
|
|
58
58
|
return self.send("select_#{key}", value)
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
def populate_select_list(key, value)
|
62
62
|
select_element = self.send("#{key}_element")
|
63
|
-
if select_element.
|
64
|
-
|
65
|
-
else
|
66
|
-
select_element.select_value(value)
|
67
|
-
end
|
63
|
+
return select_element.select(value) if select_element.include?(value)
|
64
|
+
select_element.select_value(value)
|
68
65
|
end
|
69
66
|
|
70
67
|
def is_text?(key)
|
@@ -34,8 +34,8 @@ module PageObject
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.selenium_browser(root)
|
37
|
-
return Watir::Browser.new(root) if root.is_a?(::Selenium::WebDriver::Driver)
|
38
|
-
Watir::Browser.new(Selenium::WebDriver::Driver.new(root.send(:bridge)))
|
37
|
+
return ::Watir::Browser.new(root) if root.is_a?(::Selenium::WebDriver::Driver)
|
38
|
+
::Watir::Browser.new(Selenium::WebDriver::Driver.new(root.send(:bridge)))
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.watir?(browser)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'page-object/elements'
|
2
|
-
require 'page-object/core_ext/string'
|
3
2
|
|
4
3
|
|
5
4
|
module PageObject
|
@@ -1083,7 +1082,7 @@ module PageObject
|
|
1083
1082
|
identifier = frame.values.first.map do |key, value|
|
1084
1083
|
if value.is_a?(Regexp)
|
1085
1084
|
":#{key} => #{value.inspect}"
|
1086
|
-
elsif value.
|
1085
|
+
elsif value.is_a? Integer
|
1087
1086
|
":#{key} => #{value}"
|
1088
1087
|
else
|
1089
1088
|
":#{key} => '#{value}'"
|
data/lib/page-object/version.rb
CHANGED
data/page-object.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(pkg|spec|features|coverage)/}) }
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
s.add_dependency 'watir', '~> 6.
|
20
|
+
s.add_dependency 'watir', '~> 6.7'
|
21
21
|
s.add_dependency 'selenium-webdriver', '~> 3.0'
|
22
22
|
s.add_dependency 'page_navigation', '>= 0.10'
|
23
23
|
|
@@ -27,5 +27,6 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency 'rack', '~> 1.0'
|
28
28
|
s.add_development_dependency 'coveralls', '~> 0.8.1'
|
29
29
|
s.add_development_dependency 'net-http-persistent'
|
30
|
+
s.add_development_dependency 'webdrivers', '~> 3.1'
|
30
31
|
|
31
32
|
end
|
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:
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Morgan
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-08-
|
12
|
+
date: 2017-08-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: watir
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '6.
|
20
|
+
version: '6.7'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '6.
|
27
|
+
version: '6.7'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: selenium-webdriver
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,6 +137,20 @@ dependencies:
|
|
137
137
|
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: webdrivers
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '3.1'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '3.1'
|
140
154
|
description: Page Object DSL that works with both Watir and Selenium
|
141
155
|
email:
|
142
156
|
- jeff.morgan@leandog.com
|
@@ -160,7 +174,6 @@ files:
|
|
160
174
|
- cucumber.yml
|
161
175
|
- lib/page-object.rb
|
162
176
|
- lib/page-object/accessors.rb
|
163
|
-
- lib/page-object/core_ext/string.rb
|
164
177
|
- lib/page-object/element_locators.rb
|
165
178
|
- lib/page-object/elements.rb
|
166
179
|
- lib/page-object/elements/area.rb
|