rwebspec 6.3 → 7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG +0 -3
- data/Rakefile +2 -8
- data/lib/rwebspec-watir/driver.rb +0 -2
- data/lib/rwebspec-webdriver/driver.rb +12 -13
- data/lib/rwebspec-webdriver/web_browser.rb +16 -3
- data/lib/rwebspec.rb +1 -9
- metadata +7 -9
- data/lib/plugins/testwise_plugin.rb +0 -150
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 13001af912d404bb47f5efea617edbc01f637b94c97c145a052e291e45a6bef6
|
4
|
+
data.tar.gz: 5224b41222e04f2b8d25d5538fd8b76204380b593560f5309df0d2bb2be31f28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf773632474e2ea5fcbd488cad11e63b7d653107894fad7004a6e9b298f4af186bc43e8d5d6ac26c8a555f50a4a3bf395f320f1a3851837cd0f4b58834c855a7
|
7
|
+
data.tar.gz: b5bbee1f39db72beaa58d2941e4411d2065dd6a22b7dd9ceef748fc9660213e98a7317702c9dfaaffcab573e8e10aa90589e5b91186729cdce6f497217a31a75
|
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
@@ -77,7 +77,7 @@ end
|
|
77
77
|
spec = Gem::Specification.new do |s|
|
78
78
|
s.platform= Gem::Platform::RUBY
|
79
79
|
s.name = "rwebspec"
|
80
|
-
s.version = "
|
80
|
+
s.version = "7.0"
|
81
81
|
s.summary = "Web application functional specification in Ruby"
|
82
82
|
s.description = "Executable functional specification for web applications in RSpec syntax with Watir or Selenium WebDriver"
|
83
83
|
|
@@ -86,8 +86,6 @@ spec = Gem::Specification.new do |s|
|
|
86
86
|
s.homepage= "http://github.com/zhimin/rwebspec/tree/master"
|
87
87
|
s.rubyforge_project = "rwebspec"
|
88
88
|
s.licenses = ["MIT"]
|
89
|
-
|
90
|
-
s.has_rdoc = true
|
91
89
|
s.requirements << 'none'
|
92
90
|
s.require_path = "lib"
|
93
91
|
s.autorequire = "rwebspec"
|
@@ -107,11 +105,7 @@ spec = Gem::Specification.new do |s|
|
|
107
105
|
s.add_dependency("activesupport", ">= 3.2.17")
|
108
106
|
# s.add_dependency("ci_reporter", "~> 1.9.2")
|
109
107
|
|
110
|
-
|
111
|
-
s.add_dependency("selenium-webdriver", ">= 2.42")
|
112
|
-
else
|
113
|
-
s.add_dependency("watir-classic", ">= 4.0.1")
|
114
|
-
end
|
108
|
+
s.add_dependency("selenium-webdriver", "~> 3.142")
|
115
109
|
end
|
116
110
|
|
117
111
|
Gem::PackageTask.new(spec) do |pkg|
|
@@ -13,9 +13,6 @@ require 'uri'
|
|
13
13
|
|
14
14
|
module RWebSpec
|
15
15
|
module Driver
|
16
|
-
include RWebSpec::TestWisePlugin
|
17
|
-
include RWebSpec::Popup
|
18
|
-
|
19
16
|
# open a browser, and set base_url via hash, but does not acually
|
20
17
|
#
|
21
18
|
# example:
|
@@ -62,13 +59,12 @@ module RWebSpec
|
|
62
59
|
|
63
60
|
options = default_options.merge options
|
64
61
|
|
65
|
-
if
|
66
|
-
options[:browser] =
|
62
|
+
if ENV["BROWSER"] && !ENV["BROWSER"].empty?
|
63
|
+
options[:browser] = ENV["BROWSER"].downcase
|
67
64
|
end
|
68
65
|
|
69
|
-
if
|
70
|
-
|
71
|
-
options[:browser] = "firefox"
|
66
|
+
if options[:browser].nil?
|
67
|
+
options[:browser] = "chrome"
|
72
68
|
end
|
73
69
|
|
74
70
|
if base_url =~ /^file:/
|
@@ -162,7 +158,10 @@ module RWebSpec
|
|
162
158
|
# Example:
|
163
159
|
# begin_at("http://www.itest2.com")
|
164
160
|
def begin_at(url)
|
165
|
-
dump_caller_stack
|
161
|
+
if respond_to?(:dump_caller_stack)
|
162
|
+
dump_caller_stack()
|
163
|
+
end
|
164
|
+
|
166
165
|
@web_browser.begin_at(url)
|
167
166
|
end
|
168
167
|
|
@@ -345,10 +344,10 @@ module RWebSpec
|
|
345
344
|
|
346
345
|
def perform_operation(& block)
|
347
346
|
begin
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
347
|
+
if defined? TestWiseRuntimeSupport
|
348
|
+
dump_caller_stack() if respond_to?(:dump_caller_stack)
|
349
|
+
operation_delay() if respond_to?(:operation_delay)
|
350
|
+
check_for_pause if respond_to?(:check_for_pause)
|
352
351
|
end
|
353
352
|
|
354
353
|
yield
|
@@ -71,11 +71,24 @@ module RWebSpec
|
|
71
71
|
return
|
72
72
|
end
|
73
73
|
|
74
|
-
|
75
|
-
|
74
|
+
the_chrome_options = Selenium::WebDriver::Chrome::Options.new
|
75
|
+
# make the same behaviour as Python/JS
|
76
|
+
# leave browser open until calls 'driver.quit'
|
77
|
+
the_chrome_options.add_option("detach", true)
|
78
|
+
|
79
|
+
if ENV["BROWSER_HEADLESS"] == "true"
|
80
|
+
the_chrome_options.add_argument("--headless")
|
81
|
+
end
|
82
|
+
|
83
|
+
if defined?(TestWiseRuntimeSupport) && defined?(debugging?) && debugging?
|
84
|
+
browser_debugging_port = get_browser_debugging_port() rescue 19218 # default port
|
85
|
+
puts("Enabled chrome browser debug port: #{browser_debugging_port}")
|
86
|
+
the_chrome_options.add_argument("--remote-debugging-port=#{browser_debugging_port}")
|
76
87
|
else
|
77
|
-
|
88
|
+
# puts("Chrome debugging port not enabled.")
|
78
89
|
end
|
90
|
+
|
91
|
+
@browser = Selenium::WebDriver.for(:chrome, :options => the_chrome_options)
|
79
92
|
@browser.navigate.to base_url
|
80
93
|
end
|
81
94
|
|
data/lib/rwebspec.rb
CHANGED
@@ -38,14 +38,8 @@ if ::RSpec::Version::STRING && ::RSpec::Version::STRING =~ /^3/
|
|
38
38
|
end
|
39
39
|
=end
|
40
40
|
|
41
|
-
unless defined? RWEBSPEC_VERSION
|
42
|
-
RWEBSPEC_VERSION = RWEBUNIT_VERSION = "6.0.2"
|
43
|
-
end
|
44
|
-
|
45
|
-
$testwise_polling_interval = 1 # seconds
|
46
|
-
|
47
|
-
$testwise_polling_timeout = 30 # seconds
|
48
41
|
|
42
|
+
RWEBSPEC_VERSION = "7.0"
|
49
43
|
|
50
44
|
if RUBY_PLATFORM =~ /mingw/
|
51
45
|
$screenshot_supported = false
|
@@ -128,8 +122,6 @@ module RWebSpec
|
|
128
122
|
end
|
129
123
|
end
|
130
124
|
|
131
|
-
require File.dirname(__FILE__) + "/plugins/testwise_plugin.rb"
|
132
|
-
|
133
125
|
# Changed in v4.3, the framework is loaded when initliating or reuse browser
|
134
126
|
#RWebSpec.load_framework
|
135
127
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rwebspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '
|
4
|
+
version: '7.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zhimin Zhan
|
8
8
|
autorequire: rwebspec
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -98,16 +98,16 @@ dependencies:
|
|
98
98
|
name: selenium-webdriver
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.142'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '3.142'
|
111
111
|
description: Executable functional specification for web applications in RSpec syntax
|
112
112
|
with Watir or Selenium WebDriver
|
113
113
|
email: zhimin@agileway.com.au
|
@@ -123,7 +123,6 @@ files:
|
|
123
123
|
- lib/extensions/watir_extensions.rb
|
124
124
|
- lib/extensions/webdriver_extensions.rb
|
125
125
|
- lib/extensions/window_script_extensions.rb
|
126
|
-
- lib/plugins/testwise_plugin.rb
|
127
126
|
- lib/rwebspec-common/assert.rb
|
128
127
|
- lib/rwebspec-common/clickJSDialog.rb
|
129
128
|
- lib/rwebspec-common/context.rb
|
@@ -163,8 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
162
|
version: '0'
|
164
163
|
requirements:
|
165
164
|
- none
|
166
|
-
|
167
|
-
rubygems_version: 2.6.6
|
165
|
+
rubygems_version: 3.1.2
|
168
166
|
signing_key:
|
169
167
|
specification_version: 4
|
170
168
|
summary: Web application functional specification in Ruby
|
@@ -1,150 +0,0 @@
|
|
1
|
-
require 'socket'
|
2
|
-
|
3
|
-
MAX_MESSAGE_LENGTH = 8192 # < 10K
|
4
|
-
|
5
|
-
$testwise_support = true
|
6
|
-
|
7
|
-
module RWebSpec
|
8
|
-
module TestWisePlugin
|
9
|
-
|
10
|
-
def debugging?
|
11
|
-
if ENV["TESTWISE_DEBUGGING"].to_s == "true" && ENV["TESTWISE_RUNNING_AS"] == "test_case"
|
12
|
-
return true
|
13
|
-
end
|
14
|
-
return $TESTWISE_DEBUGGING && $TESTWISE_RUNNING_AS == "test_case"
|
15
|
-
end
|
16
|
-
|
17
|
-
def write_to_console(message)
|
18
|
-
Thread.pass
|
19
|
-
if (ENV["RUN_IN_TESTWISE"] && ENV["RUN_IN_TESTWISE"].to_s == "true" || $RUN_IN_TESTWISE) && message
|
20
|
-
the_sent_msg = message.to_s
|
21
|
-
if the_sent_msg.size > MAX_MESSAGE_LENGTH
|
22
|
-
the_sent_msg = the_sent_msg[0..MAX_MESSAGE_LENGTH] + "..."
|
23
|
-
end
|
24
|
-
connect_to_testwise(" DEBUG", the_sent_msg + "\r\n")
|
25
|
-
else
|
26
|
-
puts message
|
27
|
-
end
|
28
|
-
end
|
29
|
-
alias debug write_to_console
|
30
|
-
|
31
|
-
|
32
|
-
# Support of TestWise to ajust the intervals between keystroke/mouse operations
|
33
|
-
def operation_delay
|
34
|
-
begin
|
35
|
-
$TESTWISE_OPERATION_DELAY = ENV["TESTWISE_OPERATION_DELAY"] if ENV["TESTWISE_OPERATION_DELAY"] && ENV["TESTWISE_OPERATION_DELAY"].to_i > 0
|
36
|
-
if $TESTWISE_OPERATION_DELAY && $TESTWISE_OPERATION_DELAY > 0 &&
|
37
|
-
$TESTWISE_OPERATION_DELAY < 30000 then # max 30 seconds
|
38
|
-
Thread.pass
|
39
|
-
sleep($TESTWISE_OPERATION_DELAY / 1000)
|
40
|
-
end
|
41
|
-
|
42
|
-
while (ENV["TESTWISE_PAUSE"] && ENV["TESTWISE_PAUSE"].to_s == "true") || $TESTWISE_PAUSE
|
43
|
-
Thread.pass
|
44
|
-
debug("Paused, waiting ...")
|
45
|
-
sleep 1
|
46
|
-
end
|
47
|
-
rescue => e
|
48
|
-
puts "Error on delaying: #{e}"
|
49
|
-
# ignore
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
def notify_screenshot_location(image_file_path)
|
55
|
-
connect_to_testwise(" SHOT", image_file_path)
|
56
|
-
end
|
57
|
-
|
58
|
-
# find out the line (and file) the execution is on, and notify iTest via Socket
|
59
|
-
def dump_caller_stack
|
60
|
-
return unless (ENV["TESTWISE_TRACE_EXECUTION"].to_s == "true" || $TESTWISE_TRACE_EXECUTION)
|
61
|
-
begin
|
62
|
-
trace_lines = []
|
63
|
-
trace_file = nil
|
64
|
-
found_first_spec_reference = false
|
65
|
-
caller.each_with_index do |position, idx|
|
66
|
-
next unless position =~ /\A(.*?):(\d+)/
|
67
|
-
trace_file = $1
|
68
|
-
if trace_file =~ /(_spec|_test|_rwebspec)\.rb\s*$/ || trace_file =~ /\.feature$/
|
69
|
-
found_first_spec_reference = true
|
70
|
-
trace_lines << position
|
71
|
-
break
|
72
|
-
end
|
73
|
-
trace_lines << position
|
74
|
-
break if trace_file =~ /example\/example_methods\.rb$/ or trace_file =~ /example\/example_group_methods\.rb$/
|
75
|
-
break if trace_lines.size > 10
|
76
|
-
# TODO: send multiple trace to be parse with pages.rb
|
77
|
-
# 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
|
78
|
-
end
|
79
|
-
|
80
|
-
# (trace_file.include?("_spec.rb") || trace_file.include?("_rwebspec.rb") || trace_file.include?("_test.rb") || trace_file.include?("_cmd.rb"))
|
81
|
-
if !trace_lines.empty?
|
82
|
-
connect_to_testwise(" TRACE", trace_lines.reverse.join("|"))
|
83
|
-
end
|
84
|
-
|
85
|
-
rescue => e
|
86
|
-
puts "failed to capture log: #{e}"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
|
91
|
-
def connect_to_testwise(message_type, body)
|
92
|
-
Thread.pass
|
93
|
-
testwise_port = $TESTWISE_TRACE_PORT || ENV["TESTWISE_TRACE_PORT"].to_i || 7025
|
94
|
-
testwise_socket = nil
|
95
|
-
begin
|
96
|
-
the_message = message_type + "|" + body
|
97
|
-
if @last_message == the_message then # ignore the message same as preivous one
|
98
|
-
return
|
99
|
-
end
|
100
|
-
testwise_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
|
101
|
-
testwise_socket.connect(Socket.pack_sockaddr_in(testwise_port, '127.0.0.1'))
|
102
|
-
testwise_socket.puts(the_message)
|
103
|
-
@last_message = the_message
|
104
|
-
rescue => e
|
105
|
-
puts "Failed to connect to TestWise on port #{testwise_port}, #{e}, #{e.backtrace}"
|
106
|
-
ensure
|
107
|
-
if testwise_socket
|
108
|
-
testwise_socket.close();
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def check_for_pause
|
114
|
-
|
115
|
-
json_data = fetch_debug_server_status
|
116
|
-
|
117
|
-
if json_data["testwise_ready_to_pause"]
|
118
|
-
# Already executed the the line immedately above,
|
119
|
-
# give some buffer time for TW to set $TESTWISE_PAUSE flag
|
120
|
-
sleep 0.5
|
121
|
-
end
|
122
|
-
|
123
|
-
# If the executed line no change, ignore
|
124
|
-
while json_data["testwise_pause"] || $TESTWISE_PAUSE
|
125
|
-
Thread.pass
|
126
|
-
write_to_console("[rwebspec] Paused, waiting ...")
|
127
|
-
sleep 1
|
128
|
-
json_data = fetch_debug_server_status
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
132
|
-
|
133
|
-
def fetch_debug_server_status
|
134
|
-
testwise_debug_server_port = ENV["TESTWISE_DEBUG_PORT"].to_i
|
135
|
-
if testwise_debug_server_port <= 0 # invalid
|
136
|
-
testwise_debug_server_port = $TESTWISE_DEBUG_PORT || 7035
|
137
|
-
end
|
138
|
-
|
139
|
-
if testwise_debug_server_port
|
140
|
-
# puts "debug server port: #{testwise_debug_server_port}"
|
141
|
-
server = TCPSocket.open("127.0.0.1", testwise_debug_server_port)
|
142
|
-
server.puts("debug_status")
|
143
|
-
msg = server.gets.chomp
|
144
|
-
server.close
|
145
|
-
json_data = JSON.parse(msg)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
150
|
-
end
|