Selenium 1.1.11 → 1.1.12
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/lib/selenium.rb +3 -0
- data/lib/selenium/alert.rb +15 -0
- data/lib/selenium/html_element.rb +13 -1
- data/lib/selenium/key.rb +16 -0
- data/lib/selenium/selenium_server.rb +4 -2
- data/lib/selenium/server.rb +11 -2
- data/lib/selenium/text_area.rb +15 -0
- data/lib/selenium/text_field.rb +0 -1
- data/lib/selenium/version +1 -1
- data/lib/selenium/web_page.rb +91 -3
- data/spec/selenium/examples/selenium_ruby.rb +9 -0
- data/spec/selenium/screenshot.png +0 -0
- data/spec/selenium/selenium.rb +8 -0
- data/spec/selenium/tc_html_element.rb +32 -0
- data/spec/selenium/tc_interaction_example.rb +1 -1
- data/spec/selenium/tc_web_page.rb +74 -0
- metadata +9 -2
data/lib/selenium.rb
CHANGED
@@ -11,8 +11,12 @@ module Selenium
|
|
11
11
|
webpage.browser
|
12
12
|
end
|
13
13
|
|
14
|
+
def text
|
15
|
+
@webpage.text(@locator)
|
16
|
+
end
|
17
|
+
|
14
18
|
def present?
|
15
|
-
webpage.
|
19
|
+
@webpage.element_present? @locator
|
16
20
|
end
|
17
21
|
|
18
22
|
# click the element
|
@@ -26,5 +30,13 @@ module Selenium
|
|
26
30
|
@webpage.click_wait(@locator)
|
27
31
|
end
|
28
32
|
|
33
|
+
def double_click
|
34
|
+
@webpage.double_click(@locator)
|
35
|
+
end
|
36
|
+
|
37
|
+
def key_press(key)
|
38
|
+
@webpage.key_press(@locator, key)
|
39
|
+
end
|
40
|
+
|
29
41
|
end
|
30
42
|
end
|
data/lib/selenium/key.rb
ADDED
@@ -34,13 +34,15 @@ module Selenium
|
|
34
34
|
|
35
35
|
public
|
36
36
|
attr_reader :port_number, :request_timeout
|
37
|
+
# Turn off INFO level server logs, only WARN and above message will be printed
|
37
38
|
attr_accessor :print_log
|
38
39
|
|
39
40
|
# Initialize the server driver with an opitonal port number (default to 4444)
|
40
|
-
|
41
|
+
# and request timeout (default to 30)
|
42
|
+
def initialize(port_number_to_use = 4444, request_timeout=30)
|
41
43
|
port_number_to_use = 4444 unless port_number_to_use
|
42
44
|
@port_number = port_number_to_use
|
43
|
-
@request_timeout =
|
45
|
+
@request_timeout = request_timeout
|
44
46
|
@print_log = false
|
45
47
|
end
|
46
48
|
|
data/lib/selenium/server.rb
CHANGED
@@ -21,12 +21,21 @@ class Server
|
|
21
21
|
# * error
|
22
22
|
attr_reader :status
|
23
23
|
|
24
|
+
# The timeout setting for selenium in seconds
|
25
|
+
attr_reader :timeout
|
26
|
+
|
24
27
|
def Server::on_port(port)
|
25
28
|
Server.new(SeleniumServer.new(port))
|
26
29
|
end
|
27
30
|
|
28
|
-
|
29
|
-
|
31
|
+
# Create a selenium server that can be controlled directly
|
32
|
+
def initialize(port_number, timeout=60)
|
33
|
+
if port_number.is_a? SeleniumServer
|
34
|
+
# backward compatibility, to be removed in 2.0
|
35
|
+
@server = port_number
|
36
|
+
else
|
37
|
+
@server = SeleniumServer.new(port_number, timeout)
|
38
|
+
end
|
30
39
|
@status = 'stopped'
|
31
40
|
end
|
32
41
|
|
data/lib/selenium/text_field.rb
CHANGED
data/lib/selenium/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.12
|
data/lib/selenium/web_page.rb
CHANGED
@@ -3,6 +3,13 @@ $:.unshift File.dirname(__FILE__)
|
|
3
3
|
require 'timeout'
|
4
4
|
|
5
5
|
module Selenium
|
6
|
+
# Error that is thrown when a key is not supported
|
7
|
+
class NoKeyError < NameError
|
8
|
+
def initialize(key)
|
9
|
+
super(key)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
6
13
|
# Class that models a web page with a title
|
7
14
|
class WebPage
|
8
15
|
attr_reader :browser
|
@@ -32,6 +39,14 @@ module Selenium
|
|
32
39
|
@browser.get_html_source
|
33
40
|
end
|
34
41
|
|
42
|
+
def speed=(value)
|
43
|
+
@browser.set_speed(value)
|
44
|
+
end
|
45
|
+
|
46
|
+
def speed
|
47
|
+
@browser.get_speed.to_i
|
48
|
+
end
|
49
|
+
|
35
50
|
def wait_for_load
|
36
51
|
@browser.wait_for_page_to_load
|
37
52
|
end
|
@@ -44,6 +59,10 @@ module Selenium
|
|
44
59
|
end
|
45
60
|
end
|
46
61
|
|
62
|
+
def alert
|
63
|
+
Alert.new(self)
|
64
|
+
end
|
65
|
+
|
47
66
|
def link(how, what=nil)
|
48
67
|
if (how == :text)
|
49
68
|
locator = "link=#{what}"
|
@@ -59,8 +78,12 @@ module Selenium
|
|
59
78
|
TextField.new(self, element_locator(how, what))
|
60
79
|
end
|
61
80
|
|
62
|
-
def
|
63
|
-
|
81
|
+
def text_area(how, what=nil)
|
82
|
+
TextArea.new(self, element_locator(how, what))
|
83
|
+
end
|
84
|
+
|
85
|
+
def element(how, what=nil)
|
86
|
+
HtmlElement.new(self, element_locator(how,what))
|
64
87
|
end
|
65
88
|
|
66
89
|
def element_locator(how, what=nil)
|
@@ -78,8 +101,9 @@ module Selenium
|
|
78
101
|
FileUpload.new(self, element_locator(how, what))
|
79
102
|
end
|
80
103
|
|
81
|
-
def
|
104
|
+
def open_page(url)
|
82
105
|
@browser.open(url)
|
106
|
+
wait_for_load
|
83
107
|
end
|
84
108
|
|
85
109
|
def close
|
@@ -90,6 +114,34 @@ module Selenium
|
|
90
114
|
@browser.click(locator)
|
91
115
|
end
|
92
116
|
|
117
|
+
def text(locator)
|
118
|
+
@browser.get_text(locator)
|
119
|
+
end
|
120
|
+
|
121
|
+
def button(how, what=nil)
|
122
|
+
Button.new(self, element_locator(how, what))
|
123
|
+
end
|
124
|
+
|
125
|
+
def key(key)
|
126
|
+
Key.new(self, key)
|
127
|
+
end
|
128
|
+
|
129
|
+
def element_present?(locator)
|
130
|
+
@browser.is_element_present(locator)
|
131
|
+
end
|
132
|
+
|
133
|
+
def alert_present?
|
134
|
+
@browser.is_alert_present
|
135
|
+
end
|
136
|
+
|
137
|
+
def text_present?(text)
|
138
|
+
@browser.is_text_present(text)
|
139
|
+
end
|
140
|
+
|
141
|
+
def double_click(locator)
|
142
|
+
@browser.double_click(locator)
|
143
|
+
end
|
144
|
+
|
93
145
|
def click_wait(locator)
|
94
146
|
click(locator)
|
95
147
|
wait_for_load
|
@@ -104,6 +156,38 @@ module Selenium
|
|
104
156
|
@browser.get_value(locator)
|
105
157
|
end
|
106
158
|
|
159
|
+
def alert_message
|
160
|
+
@browser.get_alert
|
161
|
+
end
|
162
|
+
|
163
|
+
def context_menu(locator)
|
164
|
+
@browser.context_menu(locator)
|
165
|
+
end
|
166
|
+
|
167
|
+
def fire_event(locator, event)
|
168
|
+
@browser.fire_event(locator, event)
|
169
|
+
end
|
170
|
+
|
171
|
+
def key_down(key)
|
172
|
+
message = "#{key}_key_down"
|
173
|
+
raise NoKeyError.new(key.to_s) unless @browser.respond_to? message
|
174
|
+
@browser.send message
|
175
|
+
end
|
176
|
+
|
177
|
+
def key_up(key)
|
178
|
+
message = "#{key}_key_up"
|
179
|
+
raise NoKeyError.new(key.to_s) unless @browser.respond_to? message
|
180
|
+
@browser.send message
|
181
|
+
end
|
182
|
+
|
183
|
+
def key_press(locator, key)
|
184
|
+
@browser.key_press(locator, key)
|
185
|
+
end
|
186
|
+
|
187
|
+
def focus(locator)
|
188
|
+
@browser.focus(locator)
|
189
|
+
end
|
190
|
+
|
107
191
|
def upload(locator, file)
|
108
192
|
# @browser.attach_file(locator, file)
|
109
193
|
@browser.click(locator)
|
@@ -120,6 +204,10 @@ module Selenium
|
|
120
204
|
def capture_screen(file)
|
121
205
|
@browser.capture_screenshot(file)
|
122
206
|
end
|
207
|
+
|
208
|
+
def to_s
|
209
|
+
"#{self.class}('#{@expected_title}') - #{browser.to_s}"
|
210
|
+
end
|
123
211
|
|
124
212
|
end
|
125
213
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require '../../../lib/selenium'
|
4
|
+
require 'selenium_ruby/selenium_ruby_page'
|
5
|
+
require 'selenium_ruby/home_page'
|
6
|
+
require 'selenium_ruby/directory_listing_page'
|
7
|
+
require 'selenium_ruby/download_page'
|
8
|
+
require 'selenium_ruby/license_page'
|
9
|
+
require 'selenium_ruby/menu'
|
Binary file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require 'selenium'
|
4
|
+
|
5
|
+
module Selenium
|
6
|
+
describe HtmlElement do
|
7
|
+
before(:all) do
|
8
|
+
@server = Server.new(4445)
|
9
|
+
@server.start
|
10
|
+
@webpage = @server.open(BROWSER, 'http://localhost:2000/test/index.html')
|
11
|
+
end
|
12
|
+
|
13
|
+
before do
|
14
|
+
@webpage.open_page('/test/index.html')
|
15
|
+
end
|
16
|
+
|
17
|
+
after(:all) do
|
18
|
+
@webpage.close if @webpage
|
19
|
+
@server.stop
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should support double click and key press' do
|
23
|
+
text_area = @webpage.text_area(:name, 'doubleclick')
|
24
|
+
text_area.enter 'html double click'
|
25
|
+
text_area.double_click
|
26
|
+
@webpage.alert.should be_present
|
27
|
+
@webpage.alert.message.should == 'double clicked with value html double click'
|
28
|
+
text_area.key_press('b')
|
29
|
+
text_area.value.should == 'html double clickb'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -6,6 +6,30 @@ require 'lib/selenium'
|
|
6
6
|
|
7
7
|
module Selenium
|
8
8
|
describe WebPage do
|
9
|
+
before(:all) do
|
10
|
+
@server = Server.new(2344)
|
11
|
+
@server.start
|
12
|
+
@@webpage = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
@@webpage.open_page('/') if @@webpage
|
17
|
+
end
|
18
|
+
|
19
|
+
after(:all) do
|
20
|
+
@server.stop
|
21
|
+
end
|
22
|
+
|
23
|
+
def webpage
|
24
|
+
@@webpage = @server.open('*chrome D:\Program Files\Mozilla Firefox2\firefox.exe', 'http://localhost:2000/') unless @@webpage
|
25
|
+
@@webpage
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should have meaningful to_s support' do
|
29
|
+
webpage = WebPage.new(SeleniumDriver.new('localhost', 2222, '*chrome', 'http://www.example.com', 60000), 'expected title')
|
30
|
+
webpage.to_s.should == 'Selenium::WebPage(\'expected title\') - SeleniumDriver'
|
31
|
+
end
|
32
|
+
|
9
33
|
it 'should create link based on text' do
|
10
34
|
webpage = WebPage.new('browser')
|
11
35
|
webpage.link(:text, 'text').locator.should == 'link=text'
|
@@ -15,5 +39,55 @@ module Selenium
|
|
15
39
|
webpage = WebPage.new('browser')
|
16
40
|
webpage.link(:href, 'a.html').locator.should == "xpath=//a[@href='a.html']"
|
17
41
|
end
|
42
|
+
|
43
|
+
it 'should support double click and key press' do
|
44
|
+
webpage.open_page('/test/index.html')
|
45
|
+
webpage.enter('doubleclick', 'webpage')
|
46
|
+
webpage.double_click('doubleclick')
|
47
|
+
webpage.should be_alert_present
|
48
|
+
webpage.alert_message.should == 'double clicked with value webpage'
|
49
|
+
webpage.key_press('doubleclick', 'a')
|
50
|
+
webpage.value('doubleclick').should == 'webpagea'
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should support context menu' do
|
54
|
+
webpage.open_page('/test/index.html')
|
55
|
+
webpage.context_menu('link=License')
|
56
|
+
webpage.capture_screen(File.join(File.dirname(__FILE__), 'screenshot.png'))
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should support focus event and fire blur event' do
|
60
|
+
webpage.open_page('/test/index.html')
|
61
|
+
webpage.focus('events')
|
62
|
+
webpage.enter('events', 'value')
|
63
|
+
webpage.value('events').should == 'value'
|
64
|
+
webpage.fire_event('events', 'blur')
|
65
|
+
webpage.should be_alert_present
|
66
|
+
webpage.alert_message.should == 'blurred with value value'
|
67
|
+
webpage.fire_event('events', 'focus')
|
68
|
+
# webpage.focus('events')
|
69
|
+
webpage.value('events').should == 'default'
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should support key event and check if it is supported' do
|
73
|
+
webpage.open_page('/test/index.httml')
|
74
|
+
webpage.key_down(:shift)
|
75
|
+
webpage.key_up(:shift)
|
76
|
+
[:shift, :meta, :alt, :control].each do |key|
|
77
|
+
key = webpage.key(key)
|
78
|
+
key.down
|
79
|
+
key.up
|
80
|
+
end
|
81
|
+
webpage.key(:alt).down
|
82
|
+
|
83
|
+
Proc.new {webpage.key_up(:command)}.should raise_error(NoKeyError)
|
84
|
+
Proc.new {webpage.key_down(:command)}.should raise_error(NoKeyError)
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should have speed as attribute' do
|
88
|
+
webpage.speed = 500
|
89
|
+
webpage.speed.should == 500
|
90
|
+
end
|
91
|
+
|
18
92
|
end
|
19
93
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Selenium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Duan
|
@@ -9,7 +9,7 @@ autorequire: selenium
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-07-
|
12
|
+
date: 2008-07-13 00:00:00 -07:00
|
13
13
|
default_executable: selenium
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -24,6 +24,7 @@ extra_rdoc_files:
|
|
24
24
|
files:
|
25
25
|
- bin/selenium
|
26
26
|
- lib/selenium
|
27
|
+
- lib/selenium/alert.rb
|
27
28
|
- lib/selenium/autoit
|
28
29
|
- lib/selenium/autoit/AutoItX3.dll
|
29
30
|
- lib/selenium/autoit/README
|
@@ -33,6 +34,7 @@ files:
|
|
33
34
|
- lib/selenium/button.rb
|
34
35
|
- lib/selenium/file_upload.rb
|
35
36
|
- lib/selenium/html_element.rb
|
37
|
+
- lib/selenium/key.rb
|
36
38
|
- lib/selenium/link.rb
|
37
39
|
- lib/selenium/locator.rb
|
38
40
|
- lib/selenium/openqa
|
@@ -44,6 +46,7 @@ files:
|
|
44
46
|
- lib/selenium/selenium_server.rb
|
45
47
|
- lib/selenium/server.rb
|
46
48
|
- lib/selenium/server_manager.rb
|
49
|
+
- lib/selenium/text_area.rb
|
47
50
|
- lib/selenium/text_field.rb
|
48
51
|
- lib/selenium/version
|
49
52
|
- lib/selenium/web_page.rb
|
@@ -57,12 +60,16 @@ files:
|
|
57
60
|
- spec/selenium/examples/selenium_ruby/license_page.rb
|
58
61
|
- spec/selenium/examples/selenium_ruby/menu.rb
|
59
62
|
- spec/selenium/examples/selenium_ruby/selenium_ruby_page.rb
|
63
|
+
- spec/selenium/examples/selenium_ruby.rb
|
60
64
|
- spec/selenium/manual_tc_file_upload.rb
|
61
65
|
- spec/selenium/manual_tc_timout.rb
|
66
|
+
- spec/selenium/screenshot.png
|
67
|
+
- spec/selenium/selenium.rb
|
62
68
|
- spec/selenium/tc_auto_it.rb
|
63
69
|
- spec/selenium/tc_auto_it_window.rb
|
64
70
|
- spec/selenium/tc_basic_operation.rb
|
65
71
|
- spec/selenium/tc_domain_example.rb
|
72
|
+
- spec/selenium/tc_html_element.rb
|
66
73
|
- spec/selenium/tc_interaction_example.rb
|
67
74
|
- spec/selenium/tc_server.rb
|
68
75
|
- spec/selenium/tc_web_page.rb
|