Selenium 1.1.11 → 1.1.12
Sign up to get free protection for your applications and to get access to all the features.
- 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
|