rwebspec 1.6 → 1.6.2
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 +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