zhimin-rwebspec 1.4.0.2 → 1.4.1
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 +6 -0
- data/Rakefile +1 -1
- data/lib/rwebspec.rb +2 -1
- data/lib/rwebspec/driver.rb +741 -734
- data/lib/rwebspec/itest_plugin.rb +79 -68
- data/lib/rwebspec/web_browser.rb +13 -0
- metadata +2 -3
@@ -1,68 +1,79 @@
|
|
1
|
-
require 'socket'
|
2
|
-
|
3
|
-
module RWebSpec
|
4
|
-
module ITestPlugin
|
5
|
-
|
6
|
-
def connect_to_itest(message_type, body)
|
7
|
-
begin
|
8
|
-
the_message = message_type + "|" + body
|
9
|
-
if @last_message == the_message then # ignore the message same as preivous one
|
10
|
-
return
|
11
|
-
end
|
12
|
-
itest_port = $ITEST2_TRACE_PORT || 7025
|
13
|
-
itest_socket = Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)
|
14
|
-
itest_socket.connect(Socket.pack_sockaddr_in(itest_port, '127.0.0.1'))
|
15
|
-
itest_socket.puts(the_message)
|
16
|
-
@last_message = the_message
|
17
|
-
itest_socket.close
|
18
|
-
rescue => e
|
19
|
-
end
|
20
|
-
end
|
21
|
-
alias connect_to_itest2 connect_to_itest
|
22
|
-
|
23
|
-
def debug(message)
|
24
|
-
connect_to_itest(" DEBUG", message + "\r\n") if $RUN_IN_ITEST
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
# Support of iTest to ajust the intervals between keystroke/mouse operations
|
29
|
-
def operation_delay
|
30
|
-
begin
|
31
|
-
if $ITEST2_OPERATION_DELAY && $ITEST2_OPERATION_DELAY > 0 &&
|
32
|
-
$ITEST2_OPERATION_DELAY && $ITEST2_OPERATION_DELAY < 30000 then # max 30 seconds
|
33
|
-
sleep($ITEST2_OPERATION_DELAY / 1000)
|
34
|
-
end
|
35
|
-
|
36
|
-
while $ITEST2_PAUSE
|
37
|
-
debug("Paused, waiting ...")
|
38
|
-
sleep 1
|
39
|
-
end
|
40
|
-
rescue => e
|
41
|
-
puts "Error on delaying: #{e}"
|
42
|
-
# ignore
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# find out the line (and file) the execution is on, and notify iTest via Socket
|
47
|
-
def dump_caller_stack
|
48
|
-
return unless $ITEST2_TRACE_EXECUTION
|
49
|
-
begin
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module RWebSpec
|
4
|
+
module ITestPlugin
|
5
|
+
|
6
|
+
def connect_to_itest(message_type, body)
|
7
|
+
begin
|
8
|
+
the_message = message_type + "|" + body
|
9
|
+
if @last_message == the_message then # ignore the message same as preivous one
|
10
|
+
return
|
11
|
+
end
|
12
|
+
itest_port = $ITEST2_TRACE_PORT || 7025
|
13
|
+
itest_socket = Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)
|
14
|
+
itest_socket.connect(Socket.pack_sockaddr_in(itest_port, '127.0.0.1'))
|
15
|
+
itest_socket.puts(the_message)
|
16
|
+
@last_message = the_message
|
17
|
+
itest_socket.close
|
18
|
+
rescue => e
|
19
|
+
end
|
20
|
+
end
|
21
|
+
alias connect_to_itest2 connect_to_itest
|
22
|
+
|
23
|
+
def debug(message)
|
24
|
+
connect_to_itest(" DEBUG", message + "\r\n") if $RUN_IN_ITEST
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# Support of iTest to ajust the intervals between keystroke/mouse operations
|
29
|
+
def operation_delay
|
30
|
+
begin
|
31
|
+
if $ITEST2_OPERATION_DELAY && $ITEST2_OPERATION_DELAY > 0 &&
|
32
|
+
$ITEST2_OPERATION_DELAY && $ITEST2_OPERATION_DELAY < 30000 then # max 30 seconds
|
33
|
+
sleep($ITEST2_OPERATION_DELAY / 1000)
|
34
|
+
end
|
35
|
+
|
36
|
+
while $ITEST2_PAUSE
|
37
|
+
debug("Paused, waiting ...")
|
38
|
+
sleep 1
|
39
|
+
end
|
40
|
+
rescue => e
|
41
|
+
puts "Error on delaying: #{e}"
|
42
|
+
# ignore
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# find out the line (and file) the execution is on, and notify iTest via Socket
|
47
|
+
def dump_caller_stack
|
48
|
+
return unless $ITEST2_TRACE_EXECUTION
|
49
|
+
begin
|
50
|
+
trace_lines = []
|
51
|
+
trace_file = nil
|
52
|
+
found_first_spec_reference = false
|
53
|
+
caller.each_with_index do |position, idx|
|
54
|
+
next unless position =~ /\A(.*?):(\d+)/
|
55
|
+
trace_file = $1
|
56
|
+
if trace_file =~ /(_spec|_test|_rwebspec)\.rb\s*$/
|
57
|
+
found_first_spec_reference = true
|
58
|
+
trace_lines << position
|
59
|
+
break
|
60
|
+
end
|
61
|
+
trace_lines << position
|
62
|
+
break if trace_file =~ /example\/example_methods\.rb$/ or trace_file =~ /example\/example_group_methods\.rb$/
|
63
|
+
break if trace_lines.size > 10
|
64
|
+
# TODO: send multiple trace to be parse with pages.rb
|
65
|
+
# break if trace_file =~ /example\/example_methods\.rb$/ or trace_file =~ /example\/example_group_methods\.rb$/ or trace_file =~ /driver\.rb$/ or trace_file =~ /timeout\.rb$/ # don't include rspec or ruby trace
|
66
|
+
end
|
67
|
+
|
68
|
+
# (trace_file.include?("_spec.rb") || trace_file.include?("_rwebspec.rb") || trace_file.include?("_test.rb") || trace_file.include?("_cmd.rb"))
|
69
|
+
if !trace_lines.empty?
|
70
|
+
connect_to_itest(" TRACE", trace_lines.reverse.join("|"))
|
71
|
+
end
|
72
|
+
|
73
|
+
rescue => e
|
74
|
+
puts "failed to capture log: #{e}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
data/lib/rwebspec/web_browser.rb
CHANGED
@@ -361,6 +361,7 @@ module RWebSpec
|
|
361
361
|
def click_button_with_caption(caption)
|
362
362
|
wait_before_and_after { button(:caption, caption).click }
|
363
363
|
end
|
364
|
+
alias click_button click_button_with_caption
|
364
365
|
|
365
366
|
# Click a button with value
|
366
367
|
# Usage:
|
@@ -557,6 +558,18 @@ module RWebSpec
|
|
557
558
|
end
|
558
559
|
|
559
560
|
|
561
|
+
# Verify the next page following an operation.
|
562
|
+
#
|
563
|
+
# Typical usage:
|
564
|
+
# browser.expect_page HomePage
|
565
|
+
def expect_page(page_clazz, argument = nil)
|
566
|
+
if argument
|
567
|
+
page_clazz.new(self, argument)
|
568
|
+
else
|
569
|
+
page_clazz.new(self)
|
570
|
+
end
|
571
|
+
end
|
572
|
+
|
560
573
|
# is it running in MS Windows platforms?
|
561
574
|
def self.is_windows?
|
562
575
|
RUBY_PLATFORM.downcase.include?("mswin") or RUBY_PLATFORM.downcase.include?("mingw")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zhimin-rwebspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zhimin Zhan
|
@@ -76,7 +76,6 @@ files:
|
|
76
76
|
- lib/watir_extensions.rb
|
77
77
|
has_rdoc: true
|
78
78
|
homepage: http://github.com/zhimin/rwebspec/tree/master
|
79
|
-
licenses:
|
80
79
|
post_install_message:
|
81
80
|
rdoc_options: []
|
82
81
|
|
@@ -97,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
96
|
requirements:
|
98
97
|
- none
|
99
98
|
rubyforge_project: rwebspec
|
100
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.2.0
|
101
100
|
signing_key:
|
102
101
|
specification_version: 2
|
103
102
|
summary: Executable functional specification for web applications in RSpec syntax and Watir
|