rwebspec 1.6 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -1
- data/README +25 -17
- data/Rakefile +1 -1
- data/lib/rwebspec/driver.rb +79 -30
- data/lib/rwebspec/load_test_helper.rb +84 -22
- data/lib/rwebspec/web_browser.rb +2 -1
- data/lib/rwebspec.rb +5 -1
- data/lib/window_script_extensions.rb +19 -0
- metadata +43 -19
- data/lib/rwebunit.rb +0 -3
data/CHANGELOG
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
|
-
1.6
|
3
|
+
1.6.2
|
4
|
+
add helper method: basic_authentication for IE and Firefox
|
5
|
+
|
6
|
+
1.6.1 (2010-07-08)
|
7
|
+
Update load test installer
|
8
|
+
Extend Watir to suppoort calling JScript/VBscript in IE
|
9
|
+
|
10
|
+
1.6 (2010-04)
|
4
11
|
Include ScreenCapture
|
5
12
|
|
6
13
|
1.5.4
|
data/README
CHANGED
@@ -1,33 +1,41 @@
|
|
1
1
|
|
2
|
-
RWebSpec wraps the popular web testing framework WATIR with RSpec Syntax to provide better easy to read automated web test cases. By using
|
2
|
+
RWebSpec wraps the popular web testing framework WATIR with RSpec Syntax to provide better easy to read automated web test cases. By using TestWise/Watir recorder, the RWebSpec test scripts can be recorded in Firefox. TestWise, The Next-Generation Functional Testing IDE, makes editing/executing test cases with ease.
|
3
3
|
|
4
|
-
Sample
|
4
|
+
Sample RWebSpec Test:
|
5
5
|
|
6
|
-
|
6
|
+
load File.dirname(__FILE__) + '/test_helper.rb'
|
7
7
|
|
8
|
-
|
9
|
-
include
|
8
|
+
specification "User Profile" do
|
9
|
+
include TestHelper
|
10
10
|
|
11
11
|
before(:all) do
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
before(:each) do
|
16
|
-
goto_page("/locator")
|
12
|
+
open_browser("http://demo.adminwise.com")
|
13
|
+
reset_database
|
17
14
|
end
|
18
15
|
|
19
16
|
after(:all) do
|
20
|
-
|
17
|
+
fail_safe { logout }
|
21
18
|
end
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
20
|
+
story "[8] User can change password" do
|
21
|
+
login_as("bob", "password")
|
22
|
+
click_link("Profile")
|
23
|
+
click_link("Change password")
|
24
|
+
|
25
|
+
password_change_page = expect_page PasswordChangePage
|
26
|
+
password_change_page.enter_current("password")
|
27
|
+
password_change_page.enter_new("newpass")
|
28
|
+
password_change_page.enter_confirm("newpass")
|
29
|
+
password_change_page.click_button("Change")
|
30
|
+
|
31
|
+
logout
|
32
|
+
login_as("bob", "newpass")
|
33
|
+
assert_link_present_with_text("Profile") # login Ok
|
28
34
|
end
|
35
|
+
|
29
36
|
end
|
30
37
|
|
31
38
|
|
32
|
-
|
39
|
+
|
40
|
+
TestWise Homepage: http://www.testwisely.com/en/testwise
|
33
41
|
|
data/Rakefile
CHANGED
@@ -72,7 +72,7 @@ end
|
|
72
72
|
spec = Gem::Specification.new do |s|
|
73
73
|
s.platform= Gem::Platform::RUBY
|
74
74
|
s.name = "rwebspec"
|
75
|
-
s.version = "1.6"
|
75
|
+
s.version = "1.6.2"
|
76
76
|
s.summary = "Executable functional specification for web applications in RSpec syntax and Watir"
|
77
77
|
# s.description = ""
|
78
78
|
|
data/lib/rwebspec/driver.rb
CHANGED
@@ -13,13 +13,13 @@ require File.join(File.dirname(__FILE__), 'matchers', "contains_text.rb")
|
|
13
13
|
require 'timeout'
|
14
14
|
require 'uri'
|
15
15
|
|
16
|
-
require 'watir/screen_capture'
|
16
|
+
require 'watir/screen_capture' if RUBY_PLATFORM.downcase.include?("mswin") or RUBY_PLATFORM.downcase.include?("mingw")
|
17
17
|
|
18
18
|
module RWebSpec
|
19
19
|
module Driver
|
20
20
|
include RWebSpec::TestWisePlugin
|
21
21
|
include RWebSpec::Popup
|
22
|
-
include Watir::ScreenCapture
|
22
|
+
include Watir::ScreenCapture if RUBY_PLATFORM.downcase.include?("mswin") or RUBY_PLATFORM.downcase.include?("mingw")
|
23
23
|
|
24
24
|
@@default_polling_interval = 1 # second
|
25
25
|
@@default_timeout = 30 # seconds
|
@@ -180,11 +180,11 @@ module RWebSpec
|
|
180
180
|
#
|
181
181
|
# attach_browser(:title, )
|
182
182
|
def attach_browser(how, what, options = {})
|
183
|
-
options.merge!(:browser => is_firefox? ? "Firefox" : "IE")
|
183
|
+
options.merge!(:browser => is_firefox? ? "Firefox" : "IE") unless options[:browser]
|
184
184
|
begin
|
185
185
|
options.merge!(:base_url => browser.context.base_url)
|
186
186
|
rescue => e
|
187
|
-
puts "
|
187
|
+
puts "failed to set base_url, ignore : #{e}"
|
188
188
|
end
|
189
189
|
WebBrowser.attach_browser(how, what, options)
|
190
190
|
end
|
@@ -241,8 +241,8 @@ module RWebSpec
|
|
241
241
|
# text_field <input> tags with the type=text (single-line), type=textarea (multi-line), and type=password
|
242
242
|
# p <p> (paragraph) tags, because
|
243
243
|
[:area, :button, :cell, :checkbox, :div, :form, :frame, :h1, :h2, :h3, :h4, :h5, :h6, :hidden, :image, :li, :link, :map, :pre, :row, :radio, :select_list, :span, :table, :text_field, :paragraph, :file_field, :label].each do |method|
|
244
|
-
define_method method do |*args|
|
245
|
-
perform_operation { @web_browser.send(method, *args) if @web_browser }
|
244
|
+
define_method method do |* args|
|
245
|
+
perform_operation { @web_browser.send(method, * args) if @web_browser }
|
246
246
|
end
|
247
247
|
end
|
248
248
|
alias td cell
|
@@ -270,8 +270,8 @@ module RWebSpec
|
|
270
270
|
# page.check_checkbox('good_ones', ['Cars', 'Toy Story'])
|
271
271
|
#
|
272
272
|
[:set_form_element, :click_link_with_text, :click_link_with_id, :submit, :click_button_with_id, :click_button_with_name, :click_button_with_caption, :click_button_with_value, :click_radio_option, :clear_radio_option, :check_checkbox, :uncheck_checkbox, :select_option].each do |method|
|
273
|
-
define_method method do |*args|
|
274
|
-
perform_operation { @web_browser.send(method, *args) if @web_browser }
|
273
|
+
define_method method do |* args|
|
274
|
+
perform_operation { @web_browser.send(method, * args) if @web_browser }
|
275
275
|
end
|
276
276
|
end
|
277
277
|
|
@@ -288,7 +288,7 @@ module RWebSpec
|
|
288
288
|
perform_operation { text_field(:id, textfield_id).set(value) }
|
289
289
|
end
|
290
290
|
|
291
|
-
def perform_operation(&block)
|
291
|
+
def perform_operation(& block)
|
292
292
|
begin
|
293
293
|
dump_caller_stack
|
294
294
|
operation_delay
|
@@ -437,9 +437,9 @@ module RWebSpec
|
|
437
437
|
require 'hpricot'
|
438
438
|
doc = Hpricot(content)
|
439
439
|
base_url.slice!(-1) if ends_with?(base_url, "/")
|
440
|
-
(doc/'link').each { |e| e['href'] = absolutify_url(e['href'], base_url, parent_url) || ""}
|
441
|
-
(doc/'img').each { |e| e['src'] = absolutify_url(e['src'], base_url, parent_url) || ""}
|
442
|
-
(doc/'script').each { |e| e['src'] = absolutify_url(e['src'], base_url, parent_url) || ""}
|
440
|
+
(doc/'link').each { |e| e['href'] = absolutify_url(e['href'], base_url, parent_url) || "" }
|
441
|
+
(doc/'img').each { |e| e['src'] = absolutify_url(e['src'], base_url, parent_url) || "" }
|
442
|
+
(doc/'script').each { |e| e['src'] = absolutify_url(e['src'], base_url, parent_url) || "" }
|
443
443
|
return doc.to_html
|
444
444
|
rescue => e
|
445
445
|
absolutize_page(content, base_url, parent_url)
|
@@ -569,7 +569,7 @@ module RWebSpec
|
|
569
569
|
# i.enter_text('btn1')
|
570
570
|
# i.click_button('btn1')
|
571
571
|
# end
|
572
|
-
def on(page, &block)
|
572
|
+
def on(page, & block)
|
573
573
|
yield page
|
574
574
|
end
|
575
575
|
|
@@ -577,7 +577,7 @@ module RWebSpec
|
|
577
577
|
#
|
578
578
|
# Example:
|
579
579
|
# shall_not_allow { 1/0 }
|
580
|
-
def shall_not_allow(&block)
|
580
|
+
def shall_not_allow(& block)
|
581
581
|
operation_performed_ok = false
|
582
582
|
begin
|
583
583
|
yield
|
@@ -593,7 +593,7 @@ module RWebSpec
|
|
593
593
|
#
|
594
594
|
# Example:
|
595
595
|
# allow { click_button('Register') }
|
596
|
-
def allow(&block)
|
596
|
+
def allow(& block)
|
597
597
|
yield
|
598
598
|
end
|
599
599
|
|
@@ -604,7 +604,7 @@ module RWebSpec
|
|
604
604
|
#
|
605
605
|
# Example:
|
606
606
|
# failsafe { click_link("Logout") } # try logout, but it still OK if not being able to (already logout))
|
607
|
-
def failsafe(&block)
|
607
|
+
def failsafe(& block)
|
608
608
|
begin
|
609
609
|
yield
|
610
610
|
rescue =>e
|
@@ -624,7 +624,7 @@ module RWebSpec
|
|
624
624
|
# wait_until {puts 'hello'}
|
625
625
|
# wait_until { div(:id, :receipt_date).exists? }
|
626
626
|
#
|
627
|
-
def wait_until(timeout = @@default_timeout || 30, polling_interval = @@default_polling_interval || 1, &block)
|
627
|
+
def wait_until(timeout = @@default_timeout || 30, polling_interval = @@default_polling_interval || 1, & block)
|
628
628
|
waiter = Watir::Waiter.new(timeout, polling_interval)
|
629
629
|
waiter.wait_until { yield }
|
630
630
|
end
|
@@ -714,7 +714,7 @@ module RWebSpec
|
|
714
714
|
# Example
|
715
715
|
# repeat_try(3, 2) { click_button('Search' } # 3 times, 6 seconds in total
|
716
716
|
# repeat_try { click_button('Search' } # using default 5 tries, 2 second interval
|
717
|
-
def repeat_try(num_tries = @@default_timeout || 30, interval = @@default_polling_interval || 1, &block)
|
717
|
+
def repeat_try(num_tries = @@default_timeout || 30, interval = @@default_polling_interval || 1, & block)
|
718
718
|
num_tries ||= 1
|
719
719
|
(num_tries - 1).times do |num|
|
720
720
|
begin
|
@@ -743,7 +743,7 @@ module RWebSpec
|
|
743
743
|
# try { click_link('waiting')}
|
744
744
|
# try(10, 2) { click_button('Search' } # try to click the 'Search' button upto 10 seconds, try every 2 seconds
|
745
745
|
# try { click_button('Search' }
|
746
|
-
def try(timeout = @@default_timeout, polling_interval = @@default_polling_interval || 1, &block)
|
746
|
+
def try(timeout = @@default_timeout, polling_interval = @@default_polling_interval || 1, & block)
|
747
747
|
start_time = Time.now
|
748
748
|
|
749
749
|
last_error = nil
|
@@ -766,17 +766,17 @@ module RWebSpec
|
|
766
766
|
##
|
767
767
|
# Convert :first to 1, :second to 2, and so on...
|
768
768
|
def symbol_to_sequence(symb)
|
769
|
-
value = {
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
769
|
+
value = {:zero => 0,
|
770
|
+
:first => 1,
|
771
|
+
:second => 2,
|
772
|
+
:third => 3,
|
773
|
+
:fourth => 4,
|
774
|
+
:fifth => 5,
|
775
|
+
:sixth => 6,
|
776
|
+
:seventh => 7,
|
777
|
+
:eighth => 8,
|
778
|
+
:ninth => 9,
|
779
|
+
:tenth => 10}[symb]
|
780
780
|
return value || symb.to_i
|
781
781
|
end
|
782
782
|
|
@@ -850,6 +850,55 @@ module RWebSpec
|
|
850
850
|
end
|
851
851
|
end
|
852
852
|
|
853
|
+
# Use AutoIT3 to send password
|
854
|
+
# title starts with "Connect to ..."
|
855
|
+
def basic_authentication_ie(title, username, password, options = {})
|
856
|
+
default_options = {:textctrl_username => "Edit2",
|
857
|
+
:textctrl_password => "Edit3",
|
858
|
+
:button_ok => 'Button1'
|
859
|
+
}
|
860
|
+
|
861
|
+
options = default_options.merge(options)
|
862
|
+
|
863
|
+
title ||= ""
|
864
|
+
if title =~ /^Connect\sto/
|
865
|
+
full_title = title
|
866
|
+
else
|
867
|
+
full_title = "Connect to #{title}"
|
868
|
+
end
|
869
|
+
require 'rformspec'
|
870
|
+
login_win = RFormSpec::Window.new(full_title)
|
871
|
+
login_win.send_control_text(options[:textctrl_username], username)
|
872
|
+
login_win.send_control_text(options[:textctrl_password], password)
|
873
|
+
login_win.click_button("OK")
|
874
|
+
end
|
875
|
+
|
876
|
+
# Use JSSH to pass authentication
|
877
|
+
# Window title "Authentication required"
|
878
|
+
def basic_authentication_firefox(username, password, wait = 3)
|
879
|
+
jssh_command = "
|
880
|
+
var length = getWindows().length;
|
881
|
+
var win;
|
882
|
+
var found = false;
|
883
|
+
for (var i = 0; i < length; i++) {
|
884
|
+
win = getWindows()[i];
|
885
|
+
if(win.document.title == \"Authentication Required\") {
|
886
|
+
found = true;
|
887
|
+
break;
|
888
|
+
}
|
889
|
+
}
|
890
|
+
if (found) {
|
891
|
+
var jsdocument = win.document;
|
892
|
+
var dialog = jsdocument.getElementsByTagName(\"dialog\")[0];
|
893
|
+
jsdocument.getElementsByTagName(\"textbox\")[0].value = \"#{username}\";
|
894
|
+
jsdocument.getElementsByTagName(\"textbox\")[1].value = \"#{password}\";
|
895
|
+
dialog.getButton(\"accept\").click();
|
896
|
+
}
|
897
|
+
\n"
|
898
|
+
sleep(wait)
|
899
|
+
$jssh_socket.send(jssh_command, 0)
|
900
|
+
# read_socket()
|
901
|
+
end
|
853
902
|
|
854
903
|
# take_screenshot to save the current active window
|
855
904
|
# TODO can't move mouse
|
@@ -5,9 +5,13 @@ module RWebSpec
|
|
5
5
|
include RWebSpec::Utils
|
6
6
|
include RWebSpec::Assert
|
7
7
|
|
8
|
+
MAX_VU = 1000
|
9
|
+
|
8
10
|
# only support firefox or Celerity
|
9
|
-
def open_browser(base_url, options)
|
10
|
-
|
11
|
+
def open_browser(base_url, options = {})
|
12
|
+
default_options = {:resynchronize => false, :firefox => false }
|
13
|
+
options = default_options.merge(options)
|
14
|
+
options[:firefox] ||= (ENV['LOADWISE_PREVIEW'] || $LOADWISE_PREVIEW)
|
11
15
|
RWebSpec::WebBrowser.new(base_url, nil, options)
|
12
16
|
end
|
13
17
|
|
@@ -78,33 +82,91 @@ module RWebSpec
|
|
78
82
|
end
|
79
83
|
|
80
84
|
# monitor current execution using
|
81
|
-
#
|
85
|
+
#
|
82
86
|
# Usage
|
83
87
|
# log_time { browser.click_button('Confirm') }
|
84
|
-
def log_time(msg, &block)
|
88
|
+
def log_time(msg, &block)
|
85
89
|
start_time = Time.now
|
86
|
-
yield
|
90
|
+
yield
|
91
|
+
end_time = Time.now
|
92
|
+
|
87
93
|
Thread.current[:log] ||= []
|
88
|
-
Thread.current[:log] <<
|
94
|
+
Thread.current[:log] << {:file => File.basename(__FILE__),
|
95
|
+
:message => msg,
|
96
|
+
:start_time => Time.now,
|
97
|
+
:duration => Time.now - start_time}
|
98
|
+
|
99
|
+
if $LOADWISE_MONITOR
|
100
|
+
begin
|
101
|
+
require 'java'
|
102
|
+
puts "Calling Java 1"
|
103
|
+
java_import com.loadwise.db.MemoryDatabase
|
104
|
+
#puts "Calling Java 2: #{MemoryDatabase.count}"
|
105
|
+
MemoryDatabase.addEntry(1, "zdfa01", "a_spec.rb", msg, start_time, end_time);
|
106
|
+
puts "Calling Java Ok: #{MemoryDatabase.count}"
|
107
|
+
rescue NameError => ne
|
108
|
+
puts "Name Error: #{ne}"
|
109
|
+
# failed to load Java class
|
110
|
+
rescue => e
|
111
|
+
puts "Failed to calling Java: #{e.class.name}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
# How to notify LoadWise at real time
|
115
|
+
# LoadWise to collect CPU
|
89
116
|
end
|
90
117
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
118
|
+
def run_with_virtual_users(virtual_user_count = 2, preview = false, &block)
|
119
|
+
raise "too many virtual users" if virtual_user_count > MAX_VU
|
120
|
+
|
121
|
+
begin
|
122
|
+
if defined?(LOADWISE_PREVIEW)
|
123
|
+
preview = LOADWISE_PREVIEW
|
124
|
+
end
|
125
|
+
rescue => e1
|
126
|
+
end
|
127
|
+
|
128
|
+
if preview
|
129
|
+
virtual_user_count = 1
|
130
|
+
$LOADWISE_PREVIEW = true
|
131
|
+
end
|
132
|
+
|
133
|
+
if (virtual_user_count <= 1)
|
134
|
+
yield
|
135
|
+
else
|
136
|
+
threads = []
|
137
|
+
vu_reports = {}
|
138
|
+
virtual_user_count.times do |idx|
|
139
|
+
threads[idx] = Thread.new do
|
140
|
+
start_time = Time.now
|
141
|
+
vu_reports[idx] ||= []
|
142
|
+
begin
|
143
|
+
yield
|
144
|
+
vu_reports[idx] = Thread.current[:log]
|
145
|
+
rescue => e
|
146
|
+
vu_reports[idx] = Thread.current[:log]
|
147
|
+
vu_reports[idx] ||= []
|
148
|
+
vu_reports[idx] << { :error => e }
|
149
|
+
end
|
150
|
+
vu_reports[idx] ||= []
|
151
|
+
vu_reports[idx] << { :message => "Total Duration", :duration => Time.now - start_time }
|
152
|
+
puts "VU[#{idx+1}] #{Time.now - start_time}s"
|
153
|
+
end
|
154
|
+
end
|
104
155
|
|
105
|
-
|
106
|
-
|
107
|
-
|
156
|
+
threads.each {|t| t.join; }
|
157
|
+
vu_reports.each do |key, value|
|
158
|
+
value.each do |entry|
|
159
|
+
if entry[:error] then
|
160
|
+
puts "Error: #{entry[:error]}"
|
161
|
+
else
|
162
|
+
puts "[#{key}] #{entry[:message]}, #{entry[:duration]}"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
return vu_reports
|
168
|
+
end
|
169
|
+
end
|
108
170
|
|
109
171
|
end
|
110
172
|
end
|
data/lib/rwebspec/web_browser.rb
CHANGED
@@ -519,7 +519,8 @@ module RWebSpec
|
|
519
519
|
options = default_options.merge(options)
|
520
520
|
site_context = Context.new(options[:base_url]) if options[:base_url]
|
521
521
|
if (options[:browser] == "Firefox")
|
522
|
-
|
522
|
+
ff = FireWatir::Firefox.attach(how, what)
|
523
|
+
return WebBrowser.new_from_existing(ff, site_context)
|
523
524
|
else
|
524
525
|
return WebBrowser.new_from_existing(Watir::IE.attach(how, what), site_context)
|
525
526
|
end
|
data/lib/rwebspec.rb
CHANGED
@@ -14,7 +14,7 @@ require 'active_support/core_ext'
|
|
14
14
|
require 'spec'
|
15
15
|
|
16
16
|
unless defined? RWEBSPEC_VERSION
|
17
|
-
RWEBSPEC_VERSION = RWEBUNIT_VERSION = "1.6"
|
17
|
+
RWEBSPEC_VERSION = RWEBUNIT_VERSION = "1.6.2"
|
18
18
|
end
|
19
19
|
|
20
20
|
# Extra full path to load libraries
|
@@ -30,6 +30,10 @@ require File.dirname(__FILE__) + "/rwebspec/rspec_helper"
|
|
30
30
|
require File.dirname(__FILE__) + "/rwebspec/load_test_helper"
|
31
31
|
require File.dirname(__FILE__) + "/rspec_extensions"
|
32
32
|
require File.dirname(__FILE__) + "/watir_extensions"
|
33
|
+
if RUBY_PLATFORM =~ /mswin/ or RUBY_PLATFORM =~ /mingw/
|
34
|
+
require File.dirname(__FILE__) + "/window_script_extensions.rb"
|
35
|
+
end
|
36
|
+
|
33
37
|
require File.dirname(__FILE__) + "/rwebspec/matchers/contains_text"
|
34
38
|
require File.dirname(__FILE__) + "/rwebspec/testwise_plugin"
|
35
39
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'watir'
|
3
|
+
|
4
|
+
# Used for calling javacript of VBScript
|
5
|
+
# Applies to IE only
|
6
|
+
#
|
7
|
+
# Ref: http://msdn.microsoft.com/en-us/library/aa741364%28VS.85%29.aspx
|
8
|
+
#
|
9
|
+
module Watir
|
10
|
+
class IE
|
11
|
+
def execute_script(scriptCode)
|
12
|
+
window.execScript(scriptCode)
|
13
|
+
end
|
14
|
+
|
15
|
+
def window
|
16
|
+
ie.Document.parentWindow
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,37 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rwebspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 11
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 6
|
9
|
+
- 2
|
10
|
+
version: 1.6.2
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Zhimin Zhan
|
8
|
-
autorequire:
|
14
|
+
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-07-08 00:00:00 +10:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - "="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 11
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 1
|
33
|
+
- 12
|
23
34
|
version: 1.1.12
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: commonwatir
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
43
|
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 5
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 6
|
49
|
+
- 5
|
33
50
|
version: 1.6.5
|
34
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
35
53
|
description:
|
36
54
|
email: zhimin@agileway.net
|
37
55
|
executables: []
|
@@ -49,22 +67,22 @@ files:
|
|
49
67
|
- lib/rwebspec/assert.rb
|
50
68
|
- lib/rwebspec/clickJSDialog.rb
|
51
69
|
- lib/rwebspec/context.rb
|
52
|
-
- lib/rwebspec/database_checker.rb
|
53
70
|
- lib/rwebspec/driver.rb
|
54
|
-
- lib/rwebspec/
|
71
|
+
- lib/rwebspec/testwise_plugin.rb
|
55
72
|
- lib/rwebspec/matchers/contains_text.rb
|
56
73
|
- lib/rwebspec/popup.rb
|
57
74
|
- lib/rwebspec/rspec_helper.rb
|
58
75
|
- lib/rwebspec/test_script.rb
|
59
76
|
- lib/rwebspec/test_utils.rb
|
60
|
-
- lib/rwebspec/testwise_plugin.rb
|
61
77
|
- lib/rwebspec/using_pages.rb
|
62
78
|
- lib/rwebspec/web_browser.rb
|
63
79
|
- lib/rwebspec/web_page.rb
|
64
80
|
- lib/rwebspec/web_testcase.rb
|
65
81
|
- lib/rwebspec.rb
|
66
|
-
- lib/rwebunit.rb
|
67
82
|
- lib/watir_extensions.rb
|
83
|
+
- lib/rwebspec/load_test_helper.rb
|
84
|
+
- lib/rwebspec/database_checker.rb
|
85
|
+
- lib/window_script_extensions.rb
|
68
86
|
has_rdoc: true
|
69
87
|
homepage: http://github.com/zhimin/rwebspec/tree/master
|
70
88
|
licenses: []
|
@@ -75,23 +93,29 @@ rdoc_options: []
|
|
75
93
|
require_paths:
|
76
94
|
- lib
|
77
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
78
97
|
requirements:
|
79
98
|
- - ">="
|
80
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
81
103
|
version: "0"
|
82
|
-
version:
|
83
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
84
106
|
requirements:
|
85
107
|
- - ">="
|
86
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
87
112
|
version: "0"
|
88
|
-
version:
|
89
113
|
requirements:
|
90
114
|
- none
|
91
115
|
rubyforge_project: rwebspec
|
92
|
-
rubygems_version: 1.3.
|
116
|
+
rubygems_version: 1.3.7
|
93
117
|
signing_key:
|
94
|
-
specification_version:
|
118
|
+
specification_version: 2
|
95
119
|
summary: Executable functional specification for web applications in RSpec syntax and Watir
|
96
120
|
test_files: []
|
97
121
|
|
data/lib/rwebunit.rb
DELETED