rwebspec 6.3 → 7.0
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.
- 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
|