page-object 2.0.0 → 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 +1 -2
- data/ChangeLog +10 -0
- data/README.md +12 -0
- data/Rakefile +2 -12
- data/cucumber.yml +2 -4
- data/lib/page-object.rb +12 -20
- data/lib/page-object/accessors.rb +50 -363
- data/lib/page-object/elements/bold.rb +0 -1
- data/lib/page-object/elements/button.rb +0 -4
- data/lib/page-object/elements/check_box.rb +19 -7
- data/lib/page-object/elements/div.rb +0 -4
- data/lib/page-object/elements/element.rb +159 -90
- data/lib/page-object/elements/file_field.rb +5 -7
- data/lib/page-object/elements/form.rb +0 -8
- data/lib/page-object/elements/hidden_field.rb +1 -4
- data/lib/page-object/elements/image.rb +13 -7
- data/lib/page-object/elements/label.rb +0 -4
- data/lib/page-object/elements/link.rb +0 -13
- data/lib/page-object/elements/list_item.rb +0 -3
- data/lib/page-object/elements/ordered_list.rb +30 -5
- data/lib/page-object/elements/radio_button.rb +12 -7
- data/lib/page-object/elements/select_list.rb +40 -8
- data/lib/page-object/elements/span.rb +0 -3
- data/lib/page-object/elements/table.rb +26 -5
- data/lib/page-object/elements/table_cell.rb +0 -4
- data/lib/page-object/elements/table_row.rb +30 -5
- data/lib/page-object/elements/text_area.rb +7 -7
- data/lib/page-object/elements/text_field.rb +5 -11
- data/lib/page-object/elements/unordered_list.rb +30 -5
- data/lib/page-object/indexed_properties.rb +1 -0
- data/lib/page-object/platforms.rb +0 -1
- data/lib/page-object/platforms/watir.rb +26 -4
- data/lib/page-object/platforms/watir/page_object.rb +4 -4
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/widgets.rb +0 -1
- data/page-object.gemspec +1 -15
- metadata +5 -47
- data/lib/page-object/platforms/selenium_webdriver.rb +0 -30
- data/lib/page-object/platforms/selenium_webdriver/button.rb +0 -15
- data/lib/page-object/platforms/selenium_webdriver/check_box.rb +0 -29
- data/lib/page-object/platforms/selenium_webdriver/element.rb +0 -335
- data/lib/page-object/platforms/selenium_webdriver/file_field.rb +0 -16
- data/lib/page-object/platforms/selenium_webdriver/form.rb +0 -16
- data/lib/page-object/platforms/selenium_webdriver/image.rb +0 -28
- data/lib/page-object/platforms/selenium_webdriver/link.rb +0 -23
- data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +0 -41
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +0 -1297
- data/lib/page-object/platforms/selenium_webdriver/radio_button.rb +0 -22
- data/lib/page-object/platforms/selenium_webdriver/select_list.rb +0 -93
- data/lib/page-object/platforms/selenium_webdriver/surrogate_selenium_element.rb +0 -42
- data/lib/page-object/platforms/selenium_webdriver/table.rb +0 -42
- data/lib/page-object/platforms/selenium_webdriver/table_row.rb +0 -43
- data/lib/page-object/platforms/selenium_webdriver/text_area.rb +0 -17
- data/lib/page-object/platforms/selenium_webdriver/text_field.rb +0 -17
- data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +0 -37
- data/lib/page-object/platforms/watir/check_box.rb +0 -29
- data/lib/page-object/platforms/watir/element.rb +0 -295
- data/lib/page-object/platforms/watir/file_field.rb +0 -16
- data/lib/page-object/platforms/watir/form.rb +0 -16
- data/lib/page-object/platforms/watir/image.rb +0 -22
- data/lib/page-object/platforms/watir/link.rb +0 -15
- data/lib/page-object/platforms/watir/ordered_list.rb +0 -40
- data/lib/page-object/platforms/watir/radio_button.rb +0 -22
- data/lib/page-object/platforms/watir/select_list.rb +0 -74
- data/lib/page-object/platforms/watir/table.rb +0 -38
- data/lib/page-object/platforms/watir/table_row.rb +0 -37
- data/lib/page-object/platforms/watir/text_area.rb +0 -23
- data/lib/page-object/platforms/watir/text_field.rb +0 -16
- data/lib/page-object/platforms/watir/unordered_list.rb +0 -42
@@ -1,9 +1,19 @@
|
|
1
1
|
module PageObject
|
2
2
|
module Elements
|
3
3
|
class Image < Element
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
7
17
|
end
|
8
18
|
|
9
19
|
protected
|
@@ -12,10 +22,6 @@ module PageObject
|
|
12
22
|
super + [:alt, :src]
|
13
23
|
end
|
14
24
|
|
15
|
-
def self.selenium_finders
|
16
|
-
super + [:alt, :src, :css]
|
17
|
-
end
|
18
|
-
|
19
25
|
end
|
20
26
|
|
21
27
|
::PageObject::Elements.tag_to_class[:img] = ::PageObject::Elements::Image
|
@@ -3,11 +3,6 @@ module PageObject
|
|
3
3
|
module Elements
|
4
4
|
class Link < Element
|
5
5
|
|
6
|
-
def initialize(element, platform)
|
7
|
-
@element = element
|
8
|
-
include_platform_for platform
|
9
|
-
end
|
10
|
-
|
11
6
|
protected
|
12
7
|
|
13
8
|
def self.watir_finders
|
@@ -18,14 +13,6 @@ module PageObject
|
|
18
13
|
super.merge({:link => :text, :link_text => :text})
|
19
14
|
end
|
20
15
|
|
21
|
-
def self.selenium_finders
|
22
|
-
super + [:link, :link_text, :title]
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.selenium_mapping
|
26
|
-
super.merge(:text => :link_text)
|
27
|
-
end
|
28
|
-
|
29
16
|
end
|
30
17
|
|
31
18
|
::PageObject::Elements.tag_to_class[:a] = ::PageObject::Elements::Link
|
@@ -4,11 +4,6 @@ module PageObject
|
|
4
4
|
class OrderedList < Element
|
5
5
|
include Enumerable
|
6
6
|
|
7
|
-
def initialize(element, platform)
|
8
|
-
@element = element
|
9
|
-
include_platform_for platform
|
10
|
-
end
|
11
|
-
|
12
7
|
#
|
13
8
|
# iterator that yields with a PageObject::Elements::ListItem
|
14
9
|
#
|
@@ -20,8 +15,38 @@ module PageObject
|
|
20
15
|
end
|
21
16
|
end
|
22
17
|
|
18
|
+
#
|
19
|
+
# Return the PageObject::Elements::ListItem for the index provided. Index
|
20
|
+
# is zero based.
|
21
|
+
#
|
22
|
+
# @return [PageObject::Elements::ListItem]
|
23
|
+
#
|
24
|
+
def [](idx)
|
25
|
+
Object::PageObject::Elements::ListItem.new(children[idx], :platform => :watir)
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Return the number of items contained in the ordered list
|
30
|
+
#
|
31
|
+
def items
|
32
|
+
children.size
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Return the ListItem objects that are children of the OrderedList
|
37
|
+
#
|
38
|
+
def list_items
|
39
|
+
children.collect do |obj|
|
40
|
+
Object::PageObject::Elements::ListItem.new(obj, :platform => :watir)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
23
44
|
protected
|
24
45
|
|
46
|
+
def children
|
47
|
+
element.ols(:xpath => child_xpath)
|
48
|
+
end
|
49
|
+
|
25
50
|
def child_xpath
|
26
51
|
"./child::li"
|
27
52
|
end
|
@@ -3,9 +3,18 @@ module PageObject
|
|
3
3
|
module Elements
|
4
4
|
class RadioButton < Element
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
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?
|
9
18
|
end
|
10
19
|
|
11
20
|
protected
|
@@ -14,10 +23,6 @@ module PageObject
|
|
14
23
|
super + [:value, :label]
|
15
24
|
end
|
16
25
|
|
17
|
-
def self.selenium_finders
|
18
|
-
super + [:value, :label]
|
19
|
-
end
|
20
|
-
|
21
26
|
end
|
22
27
|
|
23
28
|
::PageObject::Elements.type_to_class[:radio] = ::PageObject::Elements::RadioButton
|
@@ -1,11 +1,47 @@
|
|
1
|
-
|
2
1
|
module PageObject
|
3
2
|
module Elements
|
4
3
|
class SelectList < Element
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
#
|
6
|
+
# Return the PageObject::Elements::Option for the index provided. Index
|
7
|
+
# is zero based.
|
8
|
+
#
|
9
|
+
# @return [PageObject::Elements::Option]
|
10
|
+
#
|
11
|
+
def [](idx)
|
12
|
+
options[idx]
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# Return an array of Options contained in the select list.
|
17
|
+
#
|
18
|
+
# @return [array of PageObject::Elements::Option]
|
19
|
+
#
|
20
|
+
def options
|
21
|
+
element.options.map { |e| ::PageObject::Elements::Option.new(e, :platform => :watir) }
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# @return [Array<String>] An array of strings representing the text of the currently selected options.
|
26
|
+
#
|
27
|
+
def selected_options
|
28
|
+
element.selected_options.map { |e| e.text }.compact
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# @return [Array<String>] An array of strings representing the value of the currently selected options.
|
33
|
+
#
|
34
|
+
def selected_values
|
35
|
+
element.selected_options.map { |e| e.value }.compact
|
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
|
9
45
|
end
|
10
46
|
|
11
47
|
protected
|
@@ -18,10 +54,6 @@ module PageObject
|
|
18
54
|
super + [:text, :value, :label]
|
19
55
|
end
|
20
56
|
|
21
|
-
def self.selenium_finders
|
22
|
-
super + [:label]
|
23
|
-
end
|
24
|
-
|
25
57
|
end
|
26
58
|
|
27
59
|
::PageObject::Elements.tag_to_class[:select] = ::PageObject::Elements::SelectList
|
@@ -3,11 +3,6 @@ module PageObject
|
|
3
3
|
class Table < Element
|
4
4
|
include Enumerable
|
5
5
|
|
6
|
-
def initialize(element, platform)
|
7
|
-
@element = element
|
8
|
-
include_platform_for platform
|
9
|
-
end
|
10
|
-
|
11
6
|
#
|
12
7
|
# iterator that yields with a PageObject::Elements::TableRow
|
13
8
|
#
|
@@ -49,6 +44,26 @@ module PageObject
|
|
49
44
|
end
|
50
45
|
end
|
51
46
|
|
47
|
+
#
|
48
|
+
# Return the PageObject::Elements::TableRow for the index provided. Index
|
49
|
+
# is zero based. If the index provided is a String then it
|
50
|
+
# will be matched with the text from any column. The text can be a substring of the full column text.
|
51
|
+
#
|
52
|
+
# @return [PageObject::Elements::TableRow]
|
53
|
+
#
|
54
|
+
def [](idx)
|
55
|
+
idx = find_index_by_title(idx) if idx.kind_of?(String)
|
56
|
+
return nil unless idx
|
57
|
+
initialize_row(element[idx], :platform => :watir)
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Returns the number of rows in the table.
|
62
|
+
#
|
63
|
+
def rows
|
64
|
+
element.wd.find_elements(:xpath, child_xpath).size
|
65
|
+
end
|
66
|
+
|
52
67
|
protected
|
53
68
|
|
54
69
|
def child_xpath
|
@@ -59,6 +74,12 @@ module PageObject
|
|
59
74
|
::PageObject::Elements::TableRow.new(row_element, platform)
|
60
75
|
end
|
61
76
|
|
77
|
+
def find_index_by_title(row_title)
|
78
|
+
element.rows.find_index do |row|
|
79
|
+
row.cells.any? { |col| col.text.include? row_title }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
62
83
|
end
|
63
84
|
|
64
85
|
::PageObject::Elements.tag_to_class[:table] = ::PageObject::Elements::Table
|
@@ -1,14 +1,10 @@
|
|
1
|
+
require 'watir/elements/html_elements'
|
1
2
|
|
2
3
|
module PageObject
|
3
4
|
module Elements
|
4
5
|
class TableRow < Element
|
5
6
|
include Enumerable
|
6
7
|
|
7
|
-
def initialize(element, platform)
|
8
|
-
@element = element
|
9
|
-
include_platform_for platform
|
10
|
-
end
|
11
|
-
|
12
8
|
#
|
13
9
|
# iterator that yields with a PageObject::Elements::TableCell
|
14
10
|
#
|
@@ -20,6 +16,25 @@ module PageObject
|
|
20
16
|
end
|
21
17
|
end
|
22
18
|
|
19
|
+
#
|
20
|
+
# Return the PageObject::Elements::TableCell for the index provided. Index
|
21
|
+
# is zero based. If the index provided is a String then it
|
22
|
+
# will be matched with the text from the columns in the first row.
|
23
|
+
# The text can be a substring of the full column text.
|
24
|
+
#
|
25
|
+
def [](idx)
|
26
|
+
idx = find_index_by_title(idx) if idx.kind_of?(String)
|
27
|
+
return nil unless idx && columns >= idx + 1
|
28
|
+
initialize_cell(element[idx], :platform => :watir)
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# Returns the number of columns in the table.
|
33
|
+
#
|
34
|
+
def columns
|
35
|
+
element.wd.find_elements(:xpath, child_xpath).size
|
36
|
+
end
|
37
|
+
|
23
38
|
protected
|
24
39
|
|
25
40
|
def child_xpath
|
@@ -30,6 +45,16 @@ module PageObject
|
|
30
45
|
::PageObject::Elements::TableCell.new(row_element, platform)
|
31
46
|
end
|
32
47
|
|
48
|
+
def find_index_by_title(title)
|
49
|
+
table = element.parent
|
50
|
+
table = table.parent if table.tag_name == 'tbody'
|
51
|
+
if table.instance_of? Watir::HTMLElement
|
52
|
+
table = table.to_subtype
|
53
|
+
end
|
54
|
+
first_row = table[0]
|
55
|
+
first_row.cells.find_index {|column| column.text.include? title }
|
56
|
+
end
|
57
|
+
|
33
58
|
end
|
34
59
|
|
35
60
|
::PageObject::Elements.tag_to_class[:tr] = ::PageObject::Elements::TableRow
|
@@ -3,16 +3,16 @@ module PageObject
|
|
3
3
|
module Elements
|
4
4
|
class TextArea < Element
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
#
|
7
|
+
# Set the value of the TextArea
|
8
|
+
#
|
9
|
+
def value=(new_value)
|
10
|
+
element.set(new_value)
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
super + [:label]
|
13
|
-
end
|
13
|
+
protected
|
14
14
|
|
15
|
-
def self.
|
15
|
+
def self.watir_finders
|
16
16
|
super + [:label]
|
17
17
|
end
|
18
18
|
|
@@ -3,13 +3,11 @@ module PageObject
|
|
3
3
|
module Elements
|
4
4
|
class TextField < Element
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def append(text)
|
12
|
-
element.send_keys text
|
6
|
+
#
|
7
|
+
# Set the value of the TextField
|
8
|
+
#
|
9
|
+
def value=(new_value)
|
10
|
+
element.set(new_value)
|
13
11
|
end
|
14
12
|
|
15
13
|
protected
|
@@ -18,10 +16,6 @@ module PageObject
|
|
18
16
|
super + [:title, :value, :text, :label]
|
19
17
|
end
|
20
18
|
|
21
|
-
def self.selenium_finders
|
22
|
-
super + [:title, :value, :text, :label]
|
23
|
-
end
|
24
|
-
|
25
19
|
end
|
26
20
|
|
27
21
|
::PageObject::Elements.type_to_class[:text] = ::PageObject::Elements::TextField
|
@@ -4,11 +4,6 @@ module PageObject
|
|
4
4
|
class UnorderedList < Element
|
5
5
|
include Enumerable
|
6
6
|
|
7
|
-
def initialize(element, platform)
|
8
|
-
@element = element
|
9
|
-
include_platform_for platform
|
10
|
-
end
|
11
|
-
|
12
7
|
#
|
13
8
|
# iterator that yields with a PageObject::Elements::ListItem
|
14
9
|
#
|
@@ -20,6 +15,32 @@ module PageObject
|
|
20
15
|
end
|
21
16
|
end
|
22
17
|
|
18
|
+
#
|
19
|
+
# Return the PageObject::Elements::ListItem for the index provided. Index
|
20
|
+
# is zero based.
|
21
|
+
#
|
22
|
+
# @return [PageObject::Elements::ListItem]
|
23
|
+
#
|
24
|
+
def [](idx)
|
25
|
+
Object::PageObject::Elements::ListItem.new(children[idx], :platform => :watir)
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Return the number of items contained in the unordered list
|
30
|
+
#
|
31
|
+
def items
|
32
|
+
children.size
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Return the ListItem objects that are children of the
|
37
|
+
# UnorderedList
|
38
|
+
#
|
39
|
+
def list_items
|
40
|
+
children.collect do |obj|
|
41
|
+
Object::PageObject::Elements::ListItem.new(obj, :platform => :watir)
|
42
|
+
end
|
43
|
+
end
|
23
44
|
|
24
45
|
protected
|
25
46
|
|
@@ -31,6 +52,10 @@ module PageObject
|
|
31
52
|
[:class, :id, :index, :xpath]
|
32
53
|
end
|
33
54
|
|
55
|
+
def children
|
56
|
+
element.uls(:xpath => child_xpath)
|
57
|
+
end
|
58
|
+
|
34
59
|
end
|
35
60
|
|
36
61
|
::PageObject::Elements.tag_to_class[:ul] = ::PageObject::Elements::UnorderedList
|