watir_robot 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +1 -0
- data/KEYWORDS.rdoc +83 -0
- data/LICENSE +24 -0
- data/Manifest +28 -0
- data/README.rdoc +116 -0
- data/Rakefile +50 -0
- data/lib/watir_robot.rb +56 -0
- data/lib/watir_robot/exception.rb +76 -0
- data/lib/watir_robot/keywords/browser.rb +317 -0
- data/lib/watir_robot/keywords/button.rb +21 -0
- data/lib/watir_robot/keywords/checkbox.rb +53 -0
- data/lib/watir_robot/keywords/element.rb +95 -0
- data/lib/watir_robot/keywords/file_field.rb +30 -0
- data/lib/watir_robot/keywords/form.rb +143 -0
- data/lib/watir_robot/keywords/image.rb +18 -0
- data/lib/watir_robot/keywords/link.rb +21 -0
- data/lib/watir_robot/keywords/list.rb +42 -0
- data/lib/watir_robot/keywords/native.rb +148 -0
- data/lib/watir_robot/keywords/page.rb +324 -0
- data/lib/watir_robot/keywords/radio.rb +44 -0
- data/lib/watir_robot/keywords/select.rb +82 -0
- data/lib/watir_robot/keywords/table.rb +100 -0
- data/lib/watir_robot/keywords/text_field.rb +69 -0
- data/lib/watir_robot/parser.rb +170 -0
- data/scripts/example_tests/resource.txt +14 -0
- data/scripts/example_tests/test.txt +171 -0
- data/scripts/run_server.rb +13 -0
- data/watir_robot.gemspec +36 -0
- metadata +152 -0
@@ -0,0 +1,100 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to HTMl tables, including headers, bodies, footers, and cells
|
5
|
+
#
|
6
|
+
module Table
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Get contents of a single table cell
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
# @param [String] row with the top-most row as 1, the number of the row in question
|
15
|
+
# @param [String] col with the left-most row as 1, the number of the column in question
|
16
|
+
# @return [String] the text contained within the targeted table cell
|
17
|
+
#
|
18
|
+
def get_table_cell(loc, row, col)
|
19
|
+
row = row.to_i - 1
|
20
|
+
col = col.to_i - 1
|
21
|
+
@browser.table(parse_location(loc))[row][col].text
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
### Conditions ###
|
26
|
+
|
27
|
+
#
|
28
|
+
# Verify that table cell contains certain contents
|
29
|
+
#
|
30
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
31
|
+
# @param [String] row with the top-most row as 1, the number of the row in question
|
32
|
+
# @param [String] col with the left-most row as 1, the number of the column in question
|
33
|
+
# @param [String] text the text to compare against
|
34
|
+
#
|
35
|
+
def table_cell_should_contain(loc, row, col, text)
|
36
|
+
row = row.to_i - 1
|
37
|
+
col = col.to_i - 1
|
38
|
+
raise(ElementMatchError, "The table cell at row #{row} and column #{col}, located in the table at #{loc}, does not contain the text #{text}") unless
|
39
|
+
@browser.table(parse_location(loc))[row][col].text.include? text
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Verify that a table column contains certain contents
|
44
|
+
#
|
45
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
46
|
+
# @param [String] col with the left-most row as 1, the number of the column in question
|
47
|
+
# @param [String] text the text to compare against
|
48
|
+
#
|
49
|
+
def table_column_should_contain(loc, col, text)
|
50
|
+
# There's no "nice" way to do this, so we run through each row and snag
|
51
|
+
# the cell at offset y
|
52
|
+
col = col.to_i - 1
|
53
|
+
content = ''
|
54
|
+
@browser.table(parse_location(loc)).rows.each do |row|
|
55
|
+
content << ' '
|
56
|
+
content << row[col].text
|
57
|
+
end
|
58
|
+
|
59
|
+
raise(Exception::ElementMatchError, "The table column number #{c} in the table located at #{loc} does not contain the text #{text}") unless
|
60
|
+
content.include? text
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# Verify that a table's header contains certain contents
|
65
|
+
#
|
66
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
67
|
+
# @param [String] text the text to compare against
|
68
|
+
#
|
69
|
+
def table_header_should_contain(loc, text)
|
70
|
+
raise(Exception::ElementMatchError, "The table header of the table located at #{loc} does not contain the text #{text}") unless
|
71
|
+
@browser.table(parse_location(loc)).thead.text.include? text
|
72
|
+
end
|
73
|
+
|
74
|
+
#
|
75
|
+
# Verify that a table row conatins certain contents
|
76
|
+
#
|
77
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
78
|
+
# @param [String] row with the top-most row as 1, the number of the row in question
|
79
|
+
# @param [String] text the text to compare against
|
80
|
+
#
|
81
|
+
def table_row_should_contain(loc, row, text)
|
82
|
+
row = row.to_i - 1
|
83
|
+
raise(Exception::ElementMatchError, "The table row number #{row} in the table located at #{loc} does not contain the text #{text}") unless
|
84
|
+
@browser.table(parse_location(loc))[row].text.include? text
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# Verify that certain content is contained somewhere within an entire HTML table
|
89
|
+
#
|
90
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
91
|
+
# @param [String] text the text to compare against
|
92
|
+
#
|
93
|
+
def table_should_contain(loc, text)
|
94
|
+
raise(Exception::ElementMatchError, "The table located at #{loc} does not contain the text #{text}") unless
|
95
|
+
@browser.table(parse_location(loc)).text.include? text
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to text fields (+<input>+ of type text and password)
|
5
|
+
#
|
6
|
+
module TextField
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Focus cursor inside a textfield
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
#
|
15
|
+
def focus_textfield(loc)
|
16
|
+
@browser.text_field(parse_location(loc)).focus
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Input text into a text field
|
21
|
+
#
|
22
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
23
|
+
# @param [String] text the text to type into the field
|
24
|
+
#
|
25
|
+
def input_text(loc, text)
|
26
|
+
@browser.text_field(parse_location(loc)).set text
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Input a password into a password field.
|
31
|
+
#
|
32
|
+
# @note This value will not be logged.
|
33
|
+
#
|
34
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
35
|
+
# @param [String] password the password to type into the field
|
36
|
+
#
|
37
|
+
def input_password(loc, password)
|
38
|
+
# This will differ from input_text when logging is implemented
|
39
|
+
@browser.text_field(parse_location(loc)).set password
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
### Conditions ###
|
44
|
+
|
45
|
+
#
|
46
|
+
# Verify that textfield's text contains the value
|
47
|
+
#
|
48
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
49
|
+
# @param [String] text the text to type into the field
|
50
|
+
#
|
51
|
+
def textfield_should_contain(loc, text)
|
52
|
+
raise(Exception::ElementMatchError, "The textfield located at #{loc} does not contain the text #{text}") unless
|
53
|
+
@browser.text_field(parse_location(loc)).value.include? text
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Verify that textfield's text is the value
|
58
|
+
#
|
59
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
60
|
+
# @param [String] text the text to compare against
|
61
|
+
#
|
62
|
+
def textfield_should_be(loc, text)
|
63
|
+
raise(Exception::ElementMatchError, "The textfield located at #{loc} does not have text equal to #{text}") unless
|
64
|
+
@browser.text_field(parse_location(loc)).value == text
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# This module contains the functions necessary to convert arguments obtained
|
5
|
+
# from Robot Framework tests and make them meaningful to the underlying
|
6
|
+
# Watir-WebDriver code.
|
7
|
+
#
|
8
|
+
module Parser
|
9
|
+
|
10
|
+
#
|
11
|
+
# Mapping of Unicode values to java.awt.event.KeyEvent constants
|
12
|
+
#
|
13
|
+
KEY_CONSTANTS = {
|
14
|
+
32 => ['VK_SPACE'],
|
15
|
+
33 => ['VK_EXCLAMATION_MARK'],
|
16
|
+
34 => ['VK_SHIFT', 'VK_QUOTE'],
|
17
|
+
35 => ['VK_SHIFT', 'VK_3'],
|
18
|
+
36 => ['VK_SHIFT', 'VK_4'],
|
19
|
+
38 => ['VK_AMPERSAND'],
|
20
|
+
39 => ['VK_QUOTE'],
|
21
|
+
40 => ['VK_SHIFT', 'VK_9'],
|
22
|
+
41 => ['VK_SHIFT', 'VK_0'],
|
23
|
+
42 => ['VK_ASTERISK'],
|
24
|
+
43 => ['VK_ADD'],
|
25
|
+
45 => ['VK_SUBTRACT'],
|
26
|
+
46 => ['VK_DECIMAL'],
|
27
|
+
47 => ['VK_SLASH'],
|
28
|
+
48 => ['VK_0'],
|
29
|
+
49 => ['VK_1'],
|
30
|
+
50 => ['VK_2'],
|
31
|
+
51 => ['VK_3'],
|
32
|
+
52 => ['VK_4'],
|
33
|
+
53 => ['VK_5'],
|
34
|
+
54 => ['VK_6'],
|
35
|
+
55 => ['VK_7'],
|
36
|
+
56 => ['VK_8'],
|
37
|
+
57 => ['VK_9'],
|
38
|
+
58 => ['VK_SHIFT', 'VK_SEMICOLON'],
|
39
|
+
59 => ['VK_SEMICOLON'],
|
40
|
+
60 => ['VK_SHIFT', 'VK_COMMA'],
|
41
|
+
61 => ['VK_EQUALS'],
|
42
|
+
62 => ['VK_SHIFT', 'VK_DECIMAL'],
|
43
|
+
64 => ['VK_AT'],
|
44
|
+
65 => ['VK_SHIFT', 'VK_A'],
|
45
|
+
66 => ['VK_SHIFT', 'VK_B'],
|
46
|
+
67 => ['VK_SHIFT', 'VK_C'],
|
47
|
+
68 => ['VK_SHIFT', 'VK_D'],
|
48
|
+
69 => ['VK_SHIFT', 'VK_E'],
|
49
|
+
70 => ['VK_SHIFT', 'VK_F'],
|
50
|
+
71 => ['VK_SHIFT', 'VK_G'],
|
51
|
+
72 => ['VK_SHIFT', 'VK_H'],
|
52
|
+
73 => ['VK_SHIFT', 'VK_I'],
|
53
|
+
74 => ['VK_SHIFT', 'VK_J'],
|
54
|
+
75 => ['VK_SHIFT', 'VK_K'],
|
55
|
+
76 => ['VK_SHIFT', 'VK_L'],
|
56
|
+
77 => ['VK_SHIFT', 'VK_M'],
|
57
|
+
78 => ['VK_SHIFT', 'VK_N'],
|
58
|
+
79 => ['VK_SHIFT', 'VK_O'],
|
59
|
+
80 => ['VK_SHIFT', 'VK_P'],
|
60
|
+
81 => ['VK_SHIFT', 'VK_Q'],
|
61
|
+
82 => ['VK_SHIFT', 'VK_R'],
|
62
|
+
83 => ['VK_SHIFT', 'VK_S'],
|
63
|
+
84 => ['VK_SHIFT', 'VK_T'],
|
64
|
+
85 => ['VK_SHIFT', 'VK_U'],
|
65
|
+
86 => ['VK_SHIFT', 'VK_V'],
|
66
|
+
87 => ['VK_SHIFT', 'VK_W'],
|
67
|
+
88 => ['VK_SHIFT', 'VK_X'],
|
68
|
+
89 => ['VK_SHIFT', 'VK_Y'],
|
69
|
+
90 => ['VK_SHIFT', 'VK_Z'],
|
70
|
+
91 => ['VK_OPEN_BRACKET'],
|
71
|
+
92 => ['VK_BACK_SLASH'],
|
72
|
+
93 => ['VK_CLOSE_BRACKET'],
|
73
|
+
94 => ['VK_SHIFT', 'VK_6'],
|
74
|
+
95 => ['VK_SHIFT', 'VK_SUBTRACT'],
|
75
|
+
96 => ['VK_BACK_QUOTE'],
|
76
|
+
97 => ['VK_A'],
|
77
|
+
98 => ['VK_B'],
|
78
|
+
99 => ['VK_C'],
|
79
|
+
100 => ['VK_D'],
|
80
|
+
101 => ['VK_E'],
|
81
|
+
102 => ['VK_F'],
|
82
|
+
103 => ['VK_G'],
|
83
|
+
104 => ['VK_H'],
|
84
|
+
105 => ['VK_I'],
|
85
|
+
106 => ['VK_J'],
|
86
|
+
107 => ['VK_K'],
|
87
|
+
108 => ['VK_L'],
|
88
|
+
109 => ['VK_M'],
|
89
|
+
110 => ['VK_N'],
|
90
|
+
111 => ['VK_O'],
|
91
|
+
112 => ['VK_P'],
|
92
|
+
113 => ['VK_Q'],
|
93
|
+
114 => ['VK_R'],
|
94
|
+
115 => ['VK_S'],
|
95
|
+
116 => ['VK_T'],
|
96
|
+
117 => ['VK_U'],
|
97
|
+
118 => ['VK_V'],
|
98
|
+
119 => ['VK_W'],
|
99
|
+
120 => ['VK_X'],
|
100
|
+
121 => ['VK_Y'],
|
101
|
+
122 => ['VK_Z'],
|
102
|
+
123 => ['VK_SHIFT', 'VK_OPEN_BRACKET'],
|
103
|
+
125 => ['VK_SHIFT', 'VK_CLOSE_BRACKET'],
|
104
|
+
}
|
105
|
+
|
106
|
+
#
|
107
|
+
# Parses the "location" string provided as argument for locating HTML elements.
|
108
|
+
#
|
109
|
+
# Watir-WebDriver expects a hash of parameters by which to search for HTML
|
110
|
+
# elements. This function take arguments from Robot Framework tests in the
|
111
|
+
# form of <tt>attribute=value</tt> and constructs a hash which
|
112
|
+
# Watir-WebDriver can use to uniquely identify HTML elements on the page.
|
113
|
+
#
|
114
|
+
# @param [String] loc argument from Robot Framework to locate an HTML element
|
115
|
+
# @return [Hash] a hash which Watir-WebDriver can use to locate an HTML element
|
116
|
+
#
|
117
|
+
def parse_location(loc)
|
118
|
+
loc = self.trim_sides(loc)
|
119
|
+
|
120
|
+
if loc[0..3].downcase == 'css='
|
121
|
+
return {:css => loc[4..loc.length]}
|
122
|
+
elsif loc[0..5].downcase == 'xpath='
|
123
|
+
return {:xpath => loc[6..loc.length]}
|
124
|
+
else
|
125
|
+
# Comma-separated attributes
|
126
|
+
attr_list = loc.split(',')
|
127
|
+
attrs = {}
|
128
|
+
attr_list.each do |a|
|
129
|
+
attr_kv = a.split('=')
|
130
|
+
attrs[self.trim_sides(attr_kv[0])] = self.trim_sides(attr_kv[1])
|
131
|
+
end
|
132
|
+
# Watir expects symbols for keys
|
133
|
+
attrs = Hash[attrs.map { |k, v| [k.to_sym, v] }]
|
134
|
+
if attrs.key? :id
|
135
|
+
attrs.delete_if {|k, v| k != :id}
|
136
|
+
end
|
137
|
+
return attrs
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# Parses a key-code argument, provided as an actual character or in ASCII code
|
143
|
+
#
|
144
|
+
# @param [String] key the key for which to find the java.awt.KeyEvent key-code constant
|
145
|
+
# @return [String] the constant for the key event
|
146
|
+
#
|
147
|
+
def parse_key_code(key)
|
148
|
+
if key[0..5].downcase = 'ascii='
|
149
|
+
# return the ASCII code directly
|
150
|
+
return key[6..key.length]
|
151
|
+
else
|
152
|
+
# we assume it's a character and try to map it to a constant
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
#
|
157
|
+
# Small utility for trimming whitespace from both sides of a string
|
158
|
+
#
|
159
|
+
# @param [String] s string to trim both sides of
|
160
|
+
# @return [Strgin] the same string without whitespace on the left or right sides
|
161
|
+
#
|
162
|
+
def trim_sides(s)
|
163
|
+
s = s.lstrip
|
164
|
+
s = s.rstrip
|
165
|
+
return s
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
*** Settings ***
|
2
|
+
Library Remote http://localhost:8270
|
3
|
+
|
4
|
+
*** Variables ***
|
5
|
+
${BROWSER} firefox
|
6
|
+
${URL} http://bit.ly/watir-example
|
7
|
+
|
8
|
+
*** Keywords ***
|
9
|
+
Open and Maximize
|
10
|
+
[Arguments] ${url} ${browser}=firefox
|
11
|
+
[Documentation] Open a browser to a specific URL and then maximize it to full-screen.
|
12
|
+
Start Browser ${URL} ${BROWSER}
|
13
|
+
Maximize Browser Window
|
14
|
+
|
@@ -0,0 +1,171 @@
|
|
1
|
+
*** Settings ***
|
2
|
+
Suite Setup Open and Maximize ${URL} ${BROWSER}
|
3
|
+
Suite Teardown Close Browser
|
4
|
+
Library Remote http://localhost:8270
|
5
|
+
Resource resource.txt
|
6
|
+
|
7
|
+
*** Test Cases ***
|
8
|
+
Test Browser
|
9
|
+
[Setup] Go To ${URL}
|
10
|
+
Url Should Contain google.com
|
11
|
+
${current_url}= Get Url
|
12
|
+
Go To http://psd.tutsplus.com
|
13
|
+
Url Should Be http://psd.tutsplus.com/
|
14
|
+
Go Back
|
15
|
+
Go Forward
|
16
|
+
Refresh
|
17
|
+
Click Image alt=Photoshop to HTML
|
18
|
+
Switch To Next Window
|
19
|
+
Title Should Be Photoshop to HTML | Rockable Press
|
20
|
+
Switch To Previous Window
|
21
|
+
Title Should Contain Psdtuts+
|
22
|
+
Switch to Window url=http://rockablepress.com/books/photoshop-to-html/
|
23
|
+
Url Should Contain rockablepress.com
|
24
|
+
Switch to Window url=http://psd.tutsplus.com/
|
25
|
+
Close Window 2
|
26
|
+
${windows}= Get Window Count
|
27
|
+
${current_url}= Get Url
|
28
|
+
Click Link href=http://rockablepress.com/books/photoshop-to-html/
|
29
|
+
${windows}= Get Window Count
|
30
|
+
Switch to Next Window
|
31
|
+
Title Should Be Photoshop to HTML | Rockable Press
|
32
|
+
${windows}= Get Window Count
|
33
|
+
Close Window url=http://rockablepress.com/books/photoshop-to-html/
|
34
|
+
Title Should Contain Psdtuts+
|
35
|
+
|
36
|
+
Test Button
|
37
|
+
[Setup] Go To ${URL}
|
38
|
+
Click Button value=Submit
|
39
|
+
|
40
|
+
Test CheckBox
|
41
|
+
[Setup] Go To ${URL}
|
42
|
+
Select Checkbox value=Ruby
|
43
|
+
Checkbox Should Be Selected value=Ruby
|
44
|
+
Unselect Checkbox value=Ruby
|
45
|
+
Checkbox Should Not Be Selected value=Ruby
|
46
|
+
|
47
|
+
Test Element
|
48
|
+
[Setup] Go To ${URL}
|
49
|
+
Click Element name=submit
|
50
|
+
Element Should Be Visible class=errorheader
|
51
|
+
Element Should Not Be Visible name=backupCache
|
52
|
+
Element Text Should Be class=errorheader Looks like you have a question or two that still needs to be filled out.
|
53
|
+
Element Text Should Contain class=errorheader question or two
|
54
|
+
Focus name=entry.0.single
|
55
|
+
Sleep 2 seconds
|
56
|
+
${attr}= Get Element Attribute id=ss-form method
|
57
|
+
${text}= Get Element Text class=errorheader
|
58
|
+
|
59
|
+
Test FileField
|
60
|
+
Go To http://scribd.com/upload/supload
|
61
|
+
Choose File name=upload_doc C:/foobar.txt
|
62
|
+
${file}= Get Filefield Path name=upload_doc
|
63
|
+
|
64
|
+
Test Form
|
65
|
+
[Setup] Go To ${URL}
|
66
|
+
Form Should Contain Button id=ss-form value=Submit
|
67
|
+
Form Should Not Contain Button id=ss-form value=foobar
|
68
|
+
Form Should Contain Checkbox id=ss-form value=Ruby
|
69
|
+
Form Should Not Contain Checkbox id=ss-form value=foobar
|
70
|
+
Go To http://scribd.com/upload/supload
|
71
|
+
Form Should Contain Filefield name=upload_doc id=file
|
72
|
+
Form Should Not Contain Filefield name=upload_doc id=foobar
|
73
|
+
Go Back
|
74
|
+
Form Should Contain Radio Button id=ss-form value=Watir
|
75
|
+
Form Should Not Contain Radio Button id=ss-form value=foobar
|
76
|
+
Form Should Contain Select List id=ss-form id=entry_6
|
77
|
+
Form Should Not Contain Select List id=ss-form id=foobar
|
78
|
+
Form Should Contain Textfield id=ss-form id=entry_0
|
79
|
+
Form Should Not Contain Textfield id=ss-form id=foobar
|
80
|
+
|
81
|
+
Test Image
|
82
|
+
[Setup] Go To ${URL}
|
83
|
+
Go To http://psd.tutsplus.com/
|
84
|
+
Click Image alt=Photoshop to HTML
|
85
|
+
Switch To Window title=Photoshop to HTML | Rockable Press
|
86
|
+
Url Should Be http://rockablepress.com/books/photoshop-to-html/
|
87
|
+
${count}= Get Window Count
|
88
|
+
Switch To Other Window
|
89
|
+
Close Other Window
|
90
|
+
|
91
|
+
Test Link
|
92
|
+
[Setup] Go To ${URL}
|
93
|
+
Click Link text=Terms of Service
|
94
|
+
Url Should Be http://www.google.com/accounts/TOS
|
95
|
+
Go Back
|
96
|
+
|
97
|
+
Test List
|
98
|
+
[Setup] Go To ${URL}
|
99
|
+
${items}= Get List Items class=ss-choices
|
100
|
+
|
101
|
+
Test Native
|
102
|
+
[Setup] Go To ${URL}
|
103
|
+
Capture Screenshot
|
104
|
+
|
105
|
+
Test Page
|
106
|
+
[Setup] Go To ${URL}
|
107
|
+
Title Should Be Watir Example
|
108
|
+
${source}= Get Page Source
|
109
|
+
Log Page Source
|
110
|
+
${text}= Get Page Text
|
111
|
+
${status}= Get Page Status
|
112
|
+
${title}= Get Title
|
113
|
+
${all_links}= Get All Elements By Xpath //a
|
114
|
+
Log Executing JavaScript has been tested. It is simple wrapper around WebDriver's execute_script function, so if there's a problem, it's at the WebDriver level.
|
115
|
+
Page Should Contain What testing tool do you like?
|
116
|
+
Page Should Not Contain Supercalafragilisticexbialadocious
|
117
|
+
Page Should Contain Button value=Submit
|
118
|
+
Page Should Not Contain Button value=Foobar
|
119
|
+
Page Should Contain Checkbox value=Ruby
|
120
|
+
Page Should Not Contain Checkbox value=Clojure
|
121
|
+
Page Should Contain Element id=ss-form
|
122
|
+
Page Should Not Contain Element id=foobar
|
123
|
+
Go To http://www.google.com/
|
124
|
+
Page Should Contain Image src=/images/nav_logo29.png
|
125
|
+
Page Should Not Contain Image src=foobar
|
126
|
+
Go Back
|
127
|
+
Page Should Contain Link href=http://docs.google.com
|
128
|
+
Page Should Not Contain Link href=foobar
|
129
|
+
Page Should Contain List class=ss-choices false
|
130
|
+
Page Should Not Contain List class=foobar
|
131
|
+
Page Should Contain Radio Button value=Watir
|
132
|
+
Page Should Not Contain Radio Button value=foobar
|
133
|
+
Page Should Contain Textfield name=entry.0.single
|
134
|
+
Page Should Not Contain Textfield name=foobar
|
135
|
+
Title Should Be Watir Example
|
136
|
+
Title Should Contain Watir
|
137
|
+
|
138
|
+
Test Radio
|
139
|
+
[Setup] Go To ${URL}
|
140
|
+
Select Radio Button value=Watir
|
141
|
+
Radio Button Should Be Selected value=Watir
|
142
|
+
Radio Button Should Not Be Selected value=Selenium
|
143
|
+
|
144
|
+
Test Select
|
145
|
+
[Setup] Go To ${URL}
|
146
|
+
Go to http://drupal.org/project/issues/search/drupal
|
147
|
+
Select Item From List id=edit-status text=active
|
148
|
+
Item Should Be Selected id=edit-status text=active
|
149
|
+
Item Should Not Be Selected id=edit-status text=needs work
|
150
|
+
Select Item From List id=edit-status text=needs review
|
151
|
+
Item Should Be Selected id=edit-status text=needs review
|
152
|
+
Clear Items From List id=edit-status
|
153
|
+
Item should not be selected id=edit-status text=active
|
154
|
+
Item should not be selected id=edit-status text=needs review
|
155
|
+
|
156
|
+
Test Table
|
157
|
+
[Setup] Go To ${URL}
|
158
|
+
Go To http://www.facebook.com
|
159
|
+
${cell_1}= Get Table Cell ${EMPTY} 1 1
|
160
|
+
Table Cell Should Contain ${EMPTY} 1 1 Email
|
161
|
+
Table Column Should Contain ${EMPTY} 1 logged in
|
162
|
+
Table Row Should Contain ${EMPTY} 3 your password?
|
163
|
+
Table Should Contain ${EMPTY} Password
|
164
|
+
|
165
|
+
Test TextField
|
166
|
+
[Setup] Go To ${URL}
|
167
|
+
Focus TextField name=entry.0.single
|
168
|
+
Input Text name=entry.0.single Foobar
|
169
|
+
Textfield Should Contain name=entry.0.single Foo
|
170
|
+
Textfield Should Be name=entry.0.single Foobar
|
171
|
+
|