browsery 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|