watir_robot 0.1.0
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/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,21 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to HTML buttons (whether +<input>+ type submit or actual +<button>+ tags)
|
5
|
+
#
|
6
|
+
module Button
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Click a button
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
#
|
15
|
+
def click_button(loc)
|
16
|
+
@browser.button(parse_location(loc)).click
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to checkbox form elements
|
5
|
+
#
|
6
|
+
module CheckBox
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Check a checkbox
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
#
|
15
|
+
def select_checkbox(loc)
|
16
|
+
@browser.checkbox(parse_location(loc)).set
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Uncheck a checkbox
|
21
|
+
#
|
22
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
23
|
+
#
|
24
|
+
def unselect_checkbox(loc)
|
25
|
+
@browser.checkbox(parse_location(loc)).set(false)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
### Conditions ###
|
30
|
+
|
31
|
+
#
|
32
|
+
# Verify that checkbox is checked
|
33
|
+
#
|
34
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
35
|
+
#
|
36
|
+
def checkbox_should_be_selected(loc)
|
37
|
+
raise(Exception::CheckboxSelectionError, "The checkbox located at #{loc} is not checked off.") unless
|
38
|
+
@browser.checkbox(parse_location(loc)).set?
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Verify that checkbox is not checked
|
43
|
+
#
|
44
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
45
|
+
#
|
46
|
+
def checkbox_should_not_be_selected(loc)
|
47
|
+
raise(Exception::CheckboxSelectionError, "The checkbox located at #{loc} is checked off.") if
|
48
|
+
@browser.checkbox(parse_location(loc)).set?
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to HTML elements in a generic, global context
|
5
|
+
#
|
6
|
+
module Element
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Get the value of an attribute for an element
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
# @param [String] attr the attribute for which to return a value
|
15
|
+
# @return [String] the value of the attribute for the given HTML element
|
16
|
+
#
|
17
|
+
def get_element_attribute(loc, attr)
|
18
|
+
@browser.element(parse_location(loc)).attribute_value(attr)
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# Get an element's text
|
23
|
+
#
|
24
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
25
|
+
# @return [String] the text of a given HTML *without* any HTML markup
|
26
|
+
#
|
27
|
+
def get_element_text(loc)
|
28
|
+
@browser.element(parse_location(loc)).text
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# Click any HTML element
|
33
|
+
#
|
34
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
35
|
+
#
|
36
|
+
def click_element(loc)
|
37
|
+
@browser.element(parse_location(loc)).click
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# Set focus to element
|
42
|
+
#
|
43
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
44
|
+
#
|
45
|
+
def focus(loc)
|
46
|
+
@browser.element(parse_location(loc)).focus
|
47
|
+
end
|
48
|
+
|
49
|
+
### Conditions ###
|
50
|
+
|
51
|
+
#
|
52
|
+
# Verify that an element is visible
|
53
|
+
#
|
54
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
55
|
+
#
|
56
|
+
def element_should_be_visible(loc)
|
57
|
+
raise(Exception::ElementVisibilityError, "The element described by #{parse_location(loc)} is not visible") unless
|
58
|
+
@browser.element(parse_location(loc)).visible?
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# Verify that an element is not visible
|
63
|
+
#
|
64
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
65
|
+
#
|
66
|
+
def element_should_not_be_visible(loc)
|
67
|
+
raise(Exception::ElementVisibilityError, "The element described by #{parse_location(loc)} is not visible") if
|
68
|
+
@browser.element(parse_location(loc)).visible?
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# Verify that an element's text contains a specific value
|
73
|
+
#
|
74
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
75
|
+
# @param [String] text the text to compare against
|
76
|
+
#
|
77
|
+
def element_text_should_contain(loc, text)
|
78
|
+
raise(Exception::ElementMatchError, "The element's text #{@browser.element(parse_location(loc)).text} does not contain the text #{text}") unless
|
79
|
+
@browser.element(parse_location(loc)).text.include? text
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# Verify that an element's text matches a specific value
|
84
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
85
|
+
# @param [String] text the text to compare against
|
86
|
+
#
|
87
|
+
def element_text_should_be(loc, text)
|
88
|
+
raise(Exception::ElementMatchError, "The element's text #{@browser.element(parse_location(loc)).text} does not equal #{text}") unless
|
89
|
+
@browser.element(parse_location(loc)).text == text
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality for HTML file-upload fields
|
5
|
+
#
|
6
|
+
module FileField
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Insert path of a file into a file-upload field
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
# @param [String] path the path to the file you wish to upload from your computer
|
15
|
+
#
|
16
|
+
def choose_file(loc, path)
|
17
|
+
@browser.file_field(parse_location(loc)).set path
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Get the file path present in a file-upload field
|
22
|
+
#
|
23
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
24
|
+
# @param [String] the path of the file in a file-upload field
|
25
|
+
#
|
26
|
+
def get_filefield_path(loc)
|
27
|
+
@browser.file_field(parse_location(loc)).value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to HTML forms as a whole
|
5
|
+
#
|
6
|
+
# @todo Add keywords here
|
7
|
+
module Form
|
8
|
+
|
9
|
+
#
|
10
|
+
# Verify that a form contains a specific button
|
11
|
+
#
|
12
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
13
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
14
|
+
#
|
15
|
+
def form_should_contain_button(form_loc, field_loc)
|
16
|
+
raise(Exception::ElementMatchError, "The button described by #{field_loc} was not located in the form described by #{form_loc}") unless
|
17
|
+
@browser.form(parse_location(form_loc)).button(parse_location(field_loc)).exists?
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Verify that a form does not contain a specific button
|
22
|
+
#
|
23
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
24
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
25
|
+
#
|
26
|
+
def form_should_not_contain_button(form_loc, field_loc)
|
27
|
+
raise(Exception::ElementMatchError, "The button described by #{field_loc} was not located in the form described by #{form_loc}") if
|
28
|
+
@browser.form(parse_location(form_loc)).button(parse_location(field_loc)).exists?
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# Verify that a form contains a specific checkbox
|
33
|
+
#
|
34
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
35
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
36
|
+
#
|
37
|
+
def form_should_contain_checkbox(form_loc, field_loc)
|
38
|
+
raise(Exception::ElementMatchError, "The checkbox described by #{field_loc} was not located in the form described by #{form_loc}") unless
|
39
|
+
@browser.form(parse_location(form_loc)).checkbox(parse_location(field_loc)).exists?
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Verify that a form does not contain a specific checkbox
|
44
|
+
#
|
45
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
46
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
47
|
+
#
|
48
|
+
def form_should_not_contain_checkbox(form_loc, field_loc)
|
49
|
+
raise(Exception::ElementMatchError, "The checkbox described by #{field_loc} was not located in the form described by #{form_loc}") if
|
50
|
+
@browser.form(parse_location(form_loc)).checkbox(parse_location(field_loc)).exists?
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Verify that a form contains a specific file-field
|
55
|
+
#
|
56
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
57
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
58
|
+
#
|
59
|
+
def form_should_contain_filefield(form_loc, field_loc)
|
60
|
+
raise(Exception::ElementMatchError, "The file-field described by #{field_loc} was not located in the form described by #{form_loc}") unless
|
61
|
+
@browser.form(parse_location(form_loc)).file_field(parse_location(field_loc)).exists?
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Verify that a form does not contain a specific file-field
|
66
|
+
#
|
67
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
68
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
69
|
+
#
|
70
|
+
def form_should_not_contain_filefield(form_loc, field_loc)
|
71
|
+
raise(Exception::ElementMatchError, "The file-field described by #{field_loc} was not located in the form described by #{form_loc}") if
|
72
|
+
@browser.form(parse_location(form_loc)).file_field(parse_location(field_loc)).exists?
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# Verify that a form contains a specific radio button
|
77
|
+
#
|
78
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
79
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
80
|
+
#
|
81
|
+
def form_should_contain_radio_button(form_loc, field_loc)
|
82
|
+
raise(Exception::ElementMatchError, "The radio button described by #{field_loc} was not located in the form described by #{form_loc}") unless
|
83
|
+
@browser.form(parse_location(form_loc)).radio(parse_location(field_loc)).exists?
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Verify that a form does not contain a specific radio button
|
88
|
+
#
|
89
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
90
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
91
|
+
#
|
92
|
+
def form_should_not_contain_radio_button(form_loc, field_loc)
|
93
|
+
raise(Exception::ElementMatchError, "The radio button described by #{field_loc} was not located in the form described by #{form_loc}") if
|
94
|
+
@browser.form(parse_location(form_loc)).radio(parse_location(field_loc)).exists?
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# Verify that a form contains a specific select list
|
99
|
+
#
|
100
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
101
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
102
|
+
#
|
103
|
+
def form_should_contain_select_list(form_loc, field_loc)
|
104
|
+
raise(Exception::ElementMatchError, "The select list described by #{field_loc} was not located in the form described by #{form_loc}") unless
|
105
|
+
@browser.form(parse_location(form_loc)).select(parse_location(field_loc)).exists?
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# Verify that a form does not contain a specific select list
|
110
|
+
#
|
111
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
112
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
113
|
+
#
|
114
|
+
def form_should_not_contain_select_list(form_loc, field_loc)
|
115
|
+
raise(Exception::ElementMatchError, "The select list described by #{field_loc} was not located in the form described by #{form_loc}") if
|
116
|
+
@browser.form(parse_location(form_loc)).select(parse_location(field_loc)).exists?
|
117
|
+
end
|
118
|
+
|
119
|
+
#
|
120
|
+
# Verify that a form contains a specific text field
|
121
|
+
#
|
122
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
123
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
124
|
+
#
|
125
|
+
def form_should_contain_textfield(form_loc, field_loc)
|
126
|
+
raise(Exception::ElementMatchError, "The textfield described by #{field_loc} was not located in the form described by #{form_loc}") unless
|
127
|
+
@browser.form(parse_location(form_loc)).text_field(parse_location(field_loc)).exists?
|
128
|
+
end
|
129
|
+
|
130
|
+
#
|
131
|
+
# Verify that a form does not contain a specific text field
|
132
|
+
#
|
133
|
+
# @param [String] form_loc attribute/value pairs that match an HTML element
|
134
|
+
# @param [String] field_loc attribute/value pairs that match an HTML element
|
135
|
+
#
|
136
|
+
def form_should_not_contain_textfield(form_loc, field_loc)
|
137
|
+
raise(Exception::ElementMatchError, "The textfield described by #{field_loc} was not located in the form described by #{form_loc}") if
|
138
|
+
@browser.form(parse_location(form_loc)).text_field(parse_location(field_loc)).exists?
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to images in an HTML document
|
5
|
+
module Image
|
6
|
+
|
7
|
+
#
|
8
|
+
# Click an image
|
9
|
+
#
|
10
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
11
|
+
#
|
12
|
+
def click_image(loc)
|
13
|
+
@browser.image(parse_location(loc)).click
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to links in an HTML document
|
5
|
+
#
|
6
|
+
module Link
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Click a link
|
12
|
+
#
|
13
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
14
|
+
#
|
15
|
+
def click_link(loc)
|
16
|
+
@browser.link(parse_location(loc)).click
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Functionality related to ordered and unordered HTML lists
|
5
|
+
#
|
6
|
+
module List
|
7
|
+
|
8
|
+
### Actions ###
|
9
|
+
|
10
|
+
#
|
11
|
+
# Get text from the items of a list
|
12
|
+
#
|
13
|
+
# The second argument can be "true" or "false"; true for ordered list, false (default) for unordered.
|
14
|
+
#
|
15
|
+
# @param [String] loc attribute/value pairs that match an HTML element
|
16
|
+
# @param [String] ordered true is ol, false is ul; strings for the booleans because the arguments come from Robot Framework
|
17
|
+
# @param [String] sep the separator that should be used to separate the list items
|
18
|
+
#
|
19
|
+
def get_list_items(loc, ordered = "false", sep = ";;")
|
20
|
+
ordered = ordered.downcase unless ordered.nil?
|
21
|
+
if ordered.nil?
|
22
|
+
# TODO: Warn user about this ambiguity
|
23
|
+
list = @browser.ul(parse_location(loc))
|
24
|
+
elsif ordered == 'true'
|
25
|
+
list = @browser.ol(parse_location(loc))
|
26
|
+
elsif ordered == 'false'
|
27
|
+
list = @browser.ul(parse_location(loc))
|
28
|
+
else
|
29
|
+
raise(ArgumentError, "If you specify ordered vs. unordered lists, the only valid values are 'true' or 'false' (case-insensitive)")
|
30
|
+
end
|
31
|
+
|
32
|
+
items = []
|
33
|
+
list.lis.each do |item|
|
34
|
+
items << item.text
|
35
|
+
end
|
36
|
+
|
37
|
+
items.join(sep)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
module WatirRobot
|
2
|
+
|
3
|
+
#
|
4
|
+
# Native functionality for manipulating the mouse and keyboard via Java's java.awt.Robot class
|
5
|
+
#
|
6
|
+
module Native
|
7
|
+
require 'java'
|
8
|
+
java_import 'java.awt.Robot'
|
9
|
+
java_import 'java.awt.event.InputEvent'
|
10
|
+
java_import 'java.awt.event.KeyEvent'
|
11
|
+
java_import 'java.awt.Toolkit'
|
12
|
+
java_import 'java.awt.Dimension'
|
13
|
+
java_import 'java.awt.Rectangle'
|
14
|
+
java_import 'java.awt.image.BufferedImage'
|
15
|
+
java_import 'javax.imageio.ImageIO'
|
16
|
+
|
17
|
+
#
|
18
|
+
# Move mouse to specific coordinates
|
19
|
+
#
|
20
|
+
# @param [String] x x-axis coordinate (as string because arg comes from Robot Framework)
|
21
|
+
# @param [String] y y-axis coordinate (as string because arg comes from Robot Framework)
|
22
|
+
#
|
23
|
+
def move_mouse_to_position(x, y)
|
24
|
+
@robot ||= Robot.new
|
25
|
+
@robot.mouseMove(x.to_i, y.to_i)
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Left mouse press
|
30
|
+
#
|
31
|
+
def press_left_mouse_button
|
32
|
+
@robot ||= Robot.new
|
33
|
+
@robot.mousePress(InputEvent::BUTTON1_MASK)
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# Right mouse press
|
38
|
+
#
|
39
|
+
def press_right_mouse_button
|
40
|
+
@robot ||= Robot.new
|
41
|
+
@robot.mousePress(InputEvent::BUTTON2_MASK)
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# Left mouse release
|
46
|
+
#
|
47
|
+
def release_left_mouse_button
|
48
|
+
@robot ||= Robot.new
|
49
|
+
@robot.mouseRelease(InputEvent::BUTTON1_MASK)
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# Right mouse release
|
54
|
+
#
|
55
|
+
def release_right_mouse_button
|
56
|
+
@robot ||= Robot.new
|
57
|
+
@robot.mouseRelease(InputEvent::BUTTON2_MASK)
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Left mouse click
|
62
|
+
#
|
63
|
+
def click_left_mouse_button
|
64
|
+
@robot ||= Robot.new
|
65
|
+
press_left_mouse_button
|
66
|
+
release_left_mouse_button
|
67
|
+
end
|
68
|
+
|
69
|
+
#
|
70
|
+
# Right mouse click
|
71
|
+
#
|
72
|
+
def click_right_mouse_button
|
73
|
+
@robot ||= Robot.new
|
74
|
+
press_right_mouse_button
|
75
|
+
release_right_mouse_button
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# Press a key on a given HTML element
|
80
|
+
#
|
81
|
+
# @param [String] loc id, css or xpath query to identify an HTML element
|
82
|
+
# @param [String] the letter to be pressed, or an ASCII code in the format "ascii=65" (the letter 'a')
|
83
|
+
#
|
84
|
+
#def press_keys_at_location(loc, keys)
|
85
|
+
# @browser.element(parse_location(loc)).focus
|
86
|
+
#
|
87
|
+
# @robot ||= Robot.new
|
88
|
+
# key_codes = parse_key_code(key)
|
89
|
+
# @robot.keyPress(key_code)
|
90
|
+
# @robot.keyRelease(key_code)
|
91
|
+
#end
|
92
|
+
|
93
|
+
#
|
94
|
+
# Press a key (literally press and release).
|
95
|
+
#
|
96
|
+
# If you want to press a key on a given HTML element, you should use the
|
97
|
+
# Press Key keyword, or use the Focus keyword before Press Key Native.
|
98
|
+
#
|
99
|
+
# @param [String] the letter to be pressed, or an ASCII code in the format "ascii=65" (the letter 'a')
|
100
|
+
#
|
101
|
+
#def press_keys(keys)
|
102
|
+
# @robot ||= Robot.new
|
103
|
+
# key_code = parse_key_code(key)
|
104
|
+
# @robot.keyPress(key_code)
|
105
|
+
# @robot.keyRelease(key_code)
|
106
|
+
#end
|
107
|
+
|
108
|
+
#
|
109
|
+
# Drag and drop with the mouse
|
110
|
+
#
|
111
|
+
# This is at the operating system level. Consider using WebDriver's
|
112
|
+
# facilities for drag and drop if you need drag-and-drop within a web page.
|
113
|
+
#
|
114
|
+
# @param [String] start_x x-axis coordinate of initial mouse press (as string because arg comes from Robot Framework)
|
115
|
+
# @param [String] start_y y-axis coordinate of iniital mouse press (as string because arg comes from Robot Framework)
|
116
|
+
# @param [String] finish_x x-axis coordinate of final mouse release (as string because arg comes from Robot Framework)
|
117
|
+
# @param [String] finish_y y-axis coordinate of final mouse release (as string because arg comes from Robot Framework)
|
118
|
+
#
|
119
|
+
def drag_and_drop(start_x, start_y, finish_x, finish_y)
|
120
|
+
@robot ||= Robot.new
|
121
|
+
move_mouse_to_position(start_x.to_i, start_y.to_i)
|
122
|
+
press_left_mouse_button
|
123
|
+
move_mouse_to_position(finish_x.to_i, finish_y.to_i)
|
124
|
+
release_left_mouse_button
|
125
|
+
end
|
126
|
+
|
127
|
+
#
|
128
|
+
# Take a screenshot of the entire screen
|
129
|
+
#
|
130
|
+
# @param [String] path the path (including file name) to which to save the screenshot image
|
131
|
+
#
|
132
|
+
def capture_screenshot(path = nil)
|
133
|
+
t = Toolkit.getDefaultToolkit
|
134
|
+
s = t.getScreenSize
|
135
|
+
rect = Rectangle.new(0, 0, s.width, s.height);
|
136
|
+
|
137
|
+
@robot ||= Robot.new
|
138
|
+
image = @robot.createScreenCapture(rect)
|
139
|
+
if path.nil?
|
140
|
+
path = Time.now.to_i.to_s + '_screenshot.png'
|
141
|
+
end
|
142
|
+
file = java.io.File.new(path)
|
143
|
+
ImageIO.write(image, 'png', file)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|