browsery 0.1.0 → 0.2.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 +4 -4
- data/.ruby-version +1 -0
- data/bin/browsery +5 -0
- data/browsery.gemspec +8 -0
- data/lib/browsery.rb +22 -0
- data/lib/browsery/connector.rb +287 -0
- data/lib/browsery/console.rb +15 -0
- data/lib/browsery/init.rb +60 -0
- data/lib/browsery/logger.rb +12 -0
- data/lib/browsery/page_objects.rb +23 -0
- data/lib/browsery/page_objects/base.rb +266 -0
- data/lib/browsery/page_objects/element_container.rb +50 -0
- data/lib/browsery/page_objects/overlay/base.rb +85 -0
- data/lib/browsery/page_objects/widgets/base.rb +52 -0
- data/lib/browsery/parallel.rb +265 -0
- data/lib/browsery/runner.rb +111 -0
- data/lib/browsery/settings.rb +114 -0
- data/lib/browsery/test_case.rb +266 -0
- data/lib/browsery/test_cases.rb +7 -0
- data/lib/browsery/utils.rb +10 -0
- data/lib/browsery/utils/assertion_helper.rb +35 -0
- data/lib/browsery/utils/castable.rb +103 -0
- data/lib/browsery/utils/data_generator_helper.rb +145 -0
- data/lib/browsery/utils/loggable.rb +16 -0
- data/lib/browsery/utils/overlay_and_widget_helper.rb +78 -0
- data/lib/browsery/utils/page_object_helper.rb +263 -0
- data/lib/browsery/version.rb +1 -1
- data/lib/minitap/minitest5_browsery.rb +22 -0
- data/lib/minitest/autobot_settings_plugin.rb +83 -0
- data/lib/selenium/webdriver/common/element_browsery.rb +21 -0
- data/lib/tapout/custom_reporters/fancy_tap_reporter.rb +94 -0
- data/lib/yard/tagged_test_case_handler.rb +61 -0
- metadata +131 -5
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
|
3
|
+
module Selenium
|
4
|
+
module WebDriver
|
5
|
+
|
6
|
+
class Element
|
7
|
+
|
8
|
+
# Click in a way that is reliable for IE and works for other browsers as well
|
9
|
+
def browser_safe_click
|
10
|
+
bridge.browser == :internet_explorer ? send_keys(:enter) : click
|
11
|
+
end
|
12
|
+
|
13
|
+
# Click in a way that is reliable for IE and Firefox and works for other browsers as well
|
14
|
+
def browser_safe_checkbox_click
|
15
|
+
(bridge.browser == :internet_explorer || bridge.browser == :firefox) ? send_keys(:space) : click
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
class FancyTapReporter < Tapout::Reporters::Abstract
|
2
|
+
|
3
|
+
#
|
4
|
+
def start_suite(entry)
|
5
|
+
@start = Time.now
|
6
|
+
@i = 0
|
7
|
+
#n = 0
|
8
|
+
#suite.concerns.each{ |f| f.concerns.each { |s| n += s.ok.size } }
|
9
|
+
puts "1..#{entry['count']}"
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
def start_case(entry)
|
14
|
+
#$stdout.puts concern.label.ansi(:bold)
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
def pass(entry)
|
19
|
+
super(entry)
|
20
|
+
|
21
|
+
@i += 1
|
22
|
+
#desc = entry['message'] #+ " #{ok.arguments.inspect}"
|
23
|
+
|
24
|
+
puts "ok".ansi(*config.pass) + highlight(" #{@i} - #{entry['label']}")
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
def fail(entry)
|
29
|
+
super(entry)
|
30
|
+
|
31
|
+
@i += 1
|
32
|
+
x = entry['exception']
|
33
|
+
|
34
|
+
#desc = #ok.concern.label + " #{ok.arguments.inspect}"
|
35
|
+
|
36
|
+
body = []
|
37
|
+
body << "FAIL #{x['file']}:#{x['line']}" #clean_backtrace(exception.backtrace)[0]
|
38
|
+
body << "#{x['message']}"
|
39
|
+
body << x['snippet']
|
40
|
+
body << x['backtrace']
|
41
|
+
body << entry['stdout']
|
42
|
+
body = body.join("\n").gsub(/^/, ' # ')
|
43
|
+
|
44
|
+
puts "not ok".ansi(*config.fail) + highlight(" #{@i} - #{entry['label']}")
|
45
|
+
puts body
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
def error(entry)
|
50
|
+
super(entry)
|
51
|
+
|
52
|
+
@i += 1
|
53
|
+
x = entry['exception']
|
54
|
+
|
55
|
+
#desc = ok.concern.label + " #{ok.arguments.inspect}"
|
56
|
+
|
57
|
+
body = []
|
58
|
+
body << "ERROR #{x['file']}:#{x['line']}" #clean_backtrace(exception.backtrace)[0..2].join(" \n")
|
59
|
+
body << "#{x['class']}: #{x['message']}"
|
60
|
+
body << ""
|
61
|
+
body << x['backtrace']
|
62
|
+
body << entry['stdout']
|
63
|
+
body = body.join("\n").gsub(/^/, ' # ')
|
64
|
+
|
65
|
+
puts "not ok".ansi(*config.error) + highlight(" #{@i} - #{entry['label']}")
|
66
|
+
puts body
|
67
|
+
end
|
68
|
+
|
69
|
+
def todo(entry)
|
70
|
+
super(entry)
|
71
|
+
@i += 1
|
72
|
+
puts 'ok'.ansi(*config.pass) + highlight(" #{@i} - #{entry['label']} # skip #{entry['exception']['message']}")
|
73
|
+
puts " # #{entry['exception']['message']}"
|
74
|
+
end
|
75
|
+
|
76
|
+
def highlight(anything)
|
77
|
+
anything.ansi(*config.highlight)
|
78
|
+
end
|
79
|
+
|
80
|
+
# to print out formatted time and rates
|
81
|
+
def finish_suite(entry)
|
82
|
+
time, rate, avg = time_tally(entry)
|
83
|
+
delta = duration(time)
|
84
|
+
|
85
|
+
ending = []
|
86
|
+
ending << ""
|
87
|
+
ending << tally_message(entry)
|
88
|
+
ending << "[%s %.2ft/s %.4fs/t] " % [delta, rate, avg] + "Finished at: #{Time.now}"
|
89
|
+
ending = ending.join("\n").gsub(/^/, ' # ')
|
90
|
+
|
91
|
+
puts ending
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
module YARD
|
3
|
+
|
4
|
+
# Intercept all tagged test case definitions in order to document test case
|
5
|
+
# taggings automatically.
|
6
|
+
class TaggedTestCaseHandler < YARD::Handlers::Ruby::Base
|
7
|
+
# Register ourselves to handle method calls to `test`. Limit our interactions
|
8
|
+
# to the current namespace only.
|
9
|
+
handles method_call(:test)
|
10
|
+
namespace_only
|
11
|
+
|
12
|
+
# Process the method call to `test do ... end` as a dynamic method definition.
|
13
|
+
def process
|
14
|
+
# Retrieve the currently-active statement and its parameters
|
15
|
+
stmt = self.statement
|
16
|
+
params = stmt.parameters
|
17
|
+
|
18
|
+
# Move the AST pointer to the first parameter that is either a string or
|
19
|
+
# an identifier (e.g., inner symbol)
|
20
|
+
name = params.first.jump(:tstring_content, :ident).source
|
21
|
+
|
22
|
+
# Create a new method object in the namespace with the correct name
|
23
|
+
object = YARD::CodeObjects::MethodObject.new(self.namespace, "test_#{name}")
|
24
|
+
|
25
|
+
# Parse the block between the `test do` and `end` and attribute it to the
|
26
|
+
# method object above
|
27
|
+
self.parse_block(stmt.last.last, owner: object)
|
28
|
+
|
29
|
+
# Annotate it as a dynamic object with custom attributes
|
30
|
+
object.dynamic = true
|
31
|
+
|
32
|
+
# The options s-exp looks like:
|
33
|
+
#
|
34
|
+
# s(s(:assoc, s(:label, 'Key1'), s(...)),
|
35
|
+
# s(:assoc, s(:label, 'Key2'), s(...))
|
36
|
+
# )
|
37
|
+
#
|
38
|
+
# if one exists (nil otherwise)
|
39
|
+
if opts_sexp = params[1]
|
40
|
+
object['test_case_attrs'] = opts_sexp.inject(Hash.new) do |hsh, kv|
|
41
|
+
key_sexp, value_sexp = kv.jump(:assoc)
|
42
|
+
|
43
|
+
if (string_sexp = value_sexp.jump(:tstring_content)) && (string_sexp.type == :tstring_content)
|
44
|
+
hsh[key_sexp.first] = string_sexp.first
|
45
|
+
elsif (array_sexp = value_sexp.jump(:array)) && (array_sexp.type == :array)
|
46
|
+
hsh[key_sexp.first] = array_sexp.first.map { |sexp| sexp.jump(:tstring_content, :ident).first }
|
47
|
+
else
|
48
|
+
raise ArgumentError, "Cannot parse and render: #{kv.inspect}"
|
49
|
+
end
|
50
|
+
|
51
|
+
hsh
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Register the object
|
56
|
+
self.register(object)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browsery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peijie Hu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faker
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitap
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.5.3
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 5.4.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 5.4.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: selenium-webdriver
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.46'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.46'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rest-client
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.8'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.8'
|
13
111
|
- !ruby/object:Gem::Dependency
|
14
112
|
name: rake
|
15
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,17 +138,45 @@ dependencies:
|
|
40
138
|
version: '0'
|
41
139
|
description: Browsery
|
42
140
|
email:
|
43
|
-
executables:
|
141
|
+
executables:
|
142
|
+
- browsery
|
44
143
|
extensions: []
|
45
144
|
extra_rdoc_files: []
|
46
145
|
files:
|
47
146
|
- ".gitignore"
|
147
|
+
- ".ruby-version"
|
48
148
|
- Gemfile
|
49
|
-
- Gemfile.lock
|
50
149
|
- Rakefile
|
150
|
+
- bin/browsery
|
51
151
|
- browsery.gemspec
|
52
152
|
- lib/browsery.rb
|
153
|
+
- lib/browsery/connector.rb
|
154
|
+
- lib/browsery/console.rb
|
155
|
+
- lib/browsery/init.rb
|
156
|
+
- lib/browsery/logger.rb
|
157
|
+
- lib/browsery/page_objects.rb
|
158
|
+
- lib/browsery/page_objects/base.rb
|
159
|
+
- lib/browsery/page_objects/element_container.rb
|
160
|
+
- lib/browsery/page_objects/overlay/base.rb
|
161
|
+
- lib/browsery/page_objects/widgets/base.rb
|
162
|
+
- lib/browsery/parallel.rb
|
163
|
+
- lib/browsery/runner.rb
|
164
|
+
- lib/browsery/settings.rb
|
165
|
+
- lib/browsery/test_case.rb
|
166
|
+
- lib/browsery/test_cases.rb
|
167
|
+
- lib/browsery/utils.rb
|
168
|
+
- lib/browsery/utils/assertion_helper.rb
|
169
|
+
- lib/browsery/utils/castable.rb
|
170
|
+
- lib/browsery/utils/data_generator_helper.rb
|
171
|
+
- lib/browsery/utils/loggable.rb
|
172
|
+
- lib/browsery/utils/overlay_and_widget_helper.rb
|
173
|
+
- lib/browsery/utils/page_object_helper.rb
|
53
174
|
- lib/browsery/version.rb
|
175
|
+
- lib/minitap/minitest5_browsery.rb
|
176
|
+
- lib/minitest/autobot_settings_plugin.rb
|
177
|
+
- lib/selenium/webdriver/common/element_browsery.rb
|
178
|
+
- lib/tapout/custom_reporters/fancy_tap_reporter.rb
|
179
|
+
- lib/yard/tagged_test_case_handler.rb
|
54
180
|
homepage: https://github.com/peijiehu/browsery
|
55
181
|
licenses:
|
56
182
|
- MIT
|
@@ -71,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
197
|
version: '0'
|
72
198
|
requirements: []
|
73
199
|
rubyforge_project:
|
74
|
-
rubygems_version: 2.4.
|
200
|
+
rubygems_version: 2.4.5.1
|
75
201
|
signing_key:
|
76
202
|
specification_version: 4
|
77
203
|
summary: Browsery
|