mini_autobot 0.0.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.
- checksums.yaml +7 -0
- data/.gitignore +26 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +191 -0
- data/LICENSE +22 -0
- data/README.md +632 -0
- data/bin/mini_autobot +5 -0
- data/lib/mini_autobot.rb +44 -0
- data/lib/mini_autobot/connector.rb +288 -0
- data/lib/mini_autobot/console.rb +15 -0
- data/lib/mini_autobot/emails.rb +5 -0
- data/lib/mini_autobot/emails/mailbox.rb +15 -0
- data/lib/mini_autobot/endeca/base.rb +6 -0
- data/lib/mini_autobot/init.rb +63 -0
- data/lib/mini_autobot/logger.rb +12 -0
- data/lib/mini_autobot/page_objects.rb +22 -0
- data/lib/mini_autobot/page_objects/base.rb +264 -0
- data/lib/mini_autobot/page_objects/overlay/base.rb +76 -0
- data/lib/mini_autobot/page_objects/widgets/base.rb +47 -0
- data/lib/mini_autobot/parallel.rb +197 -0
- data/lib/mini_autobot/runner.rb +91 -0
- data/lib/mini_autobot/settings.rb +78 -0
- data/lib/mini_autobot/test_case.rb +233 -0
- data/lib/mini_autobot/test_cases.rb +7 -0
- data/lib/mini_autobot/utils.rb +10 -0
- data/lib/mini_autobot/utils/assertion_helper.rb +35 -0
- data/lib/mini_autobot/utils/castable.rb +103 -0
- data/lib/mini_autobot/utils/data_generator_helper.rb +145 -0
- data/lib/mini_autobot/utils/endeca_helper.rb +46 -0
- data/lib/mini_autobot/utils/loggable.rb +16 -0
- data/lib/mini_autobot/utils/overlay_and_widget_helper.rb +78 -0
- data/lib/mini_autobot/utils/page_object_helper.rb +209 -0
- data/lib/mini_autobot/version.rb +3 -0
- data/lib/minitap/minitest5_rent.rb +22 -0
- data/lib/minitest/autobot_settings_plugin.rb +77 -0
- data/lib/tapout/custom_reporters/fancy_tap_reporter.rb +94 -0
- data/lib/yard/tagged_test_case_handler.rb +61 -0
- data/mini_autobot.gemspec +38 -0
- metadata +299 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'minitap'
|
2
|
+
|
3
|
+
module Minitest
|
4
|
+
|
5
|
+
##
|
6
|
+
# Base class for TapY and TapJ runners.
|
7
|
+
#
|
8
|
+
class Minitap
|
9
|
+
|
10
|
+
def tapout_before_case(test_case)
|
11
|
+
doc = {
|
12
|
+
'type' => 'case',
|
13
|
+
'subtype' => '',
|
14
|
+
'label' => "#{test_case}",
|
15
|
+
'level' => 0
|
16
|
+
}
|
17
|
+
return doc
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Minitest
|
2
|
+
|
3
|
+
# Minitest plugin: autobot_settings
|
4
|
+
#
|
5
|
+
# This is where the options are propagated to +MiniAutobot.settings+.
|
6
|
+
def self.plugin_autobot_settings_init(options)
|
7
|
+
MiniAutobot.settings = options
|
8
|
+
|
9
|
+
MiniAutobot.logger = MiniAutobot::Logger.new('mini_autobot.log', 'daily').tap do |logger|
|
10
|
+
logger.formatter = proc do |sev, ts, prog, msg|
|
11
|
+
msg = msg.inspect unless String === msg
|
12
|
+
"#{ts.strftime('%Y-%m-%dT%H:%M:%S.%6N')} #{sev}: #{String === msg ? msg : msg.inspect}\n"
|
13
|
+
end
|
14
|
+
logger.level = case MiniAutobot.settings.verbosity_level
|
15
|
+
when 0
|
16
|
+
Logger::WARN
|
17
|
+
when 1
|
18
|
+
Logger::INFO
|
19
|
+
else
|
20
|
+
Logger::DEBUG
|
21
|
+
end
|
22
|
+
logger.info("Booting up with arguments: #{options[:args].inspect}")
|
23
|
+
at_exit { logger.info("Shutting down") }
|
24
|
+
end
|
25
|
+
|
26
|
+
MiniAutobot::Console.bootstrap! if options[:console]
|
27
|
+
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
# Minitest plugin: autobot_settings
|
32
|
+
#
|
33
|
+
# This plugin for minitest injects mini_autobot-specific command-line arguments, and
|
34
|
+
# passes it along to mini_autobot.
|
35
|
+
def self.plugin_autobot_settings_options(parser, options)
|
36
|
+
options[:auto_finalize] = true
|
37
|
+
parser.on('-Q', '--no-auto-quit-driver', "Don't automatically quit the driver after a test case") do |value|
|
38
|
+
options[:auto_finalize] = value
|
39
|
+
end
|
40
|
+
|
41
|
+
options[:connector] = ENV['AUTOBOT_CONNECTOR'] if ENV.has_key?('AUTOBOT_CONNECTOR')
|
42
|
+
parser.on('-c', '--connector TYPE', 'Run using a specific connector profile') do |value|
|
43
|
+
options[:connector] = value
|
44
|
+
end
|
45
|
+
|
46
|
+
options[:env] = ENV['AUTOBOT_ENV'] if ENV.has_key?('AUTOBOT_ENV')
|
47
|
+
parser.on('-e', '--env ENV', 'Run against a specific environment, host_env') do |value|
|
48
|
+
options[:env] = value
|
49
|
+
end
|
50
|
+
|
51
|
+
options[:console] = false
|
52
|
+
parser.on('-i', '--console', 'Run an interactive session within the context of an empty test') do |value|
|
53
|
+
options[:console] = true
|
54
|
+
end
|
55
|
+
|
56
|
+
options[:reuse_driver] = false
|
57
|
+
parser.on('-r', '--reuse-driver', "Reuse driver between tests") do |value|
|
58
|
+
options[:reuse_driver] = value
|
59
|
+
end
|
60
|
+
|
61
|
+
parser.on('-t', '--tag TAGLIST', 'Run only tests matching a specific tag, tags, or tagsets') do |value|
|
62
|
+
options[:tags] ||= [ ]
|
63
|
+
options[:tags] << value.to_s.split(',').map { |t| t.to_sym }
|
64
|
+
end
|
65
|
+
|
66
|
+
options[:verbosity_level] = 0
|
67
|
+
parser.on('-v', '--verbose', 'Output verbose logs to the log file') do |value|
|
68
|
+
options[:verbosity_level] += 1
|
69
|
+
end
|
70
|
+
|
71
|
+
options[:parallel] = false
|
72
|
+
parser.on('-P', '--parallel', 'Run in parallel') do |value|
|
73
|
+
options[:parallel] = value
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
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
|
@@ -0,0 +1,38 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'mini_autobot/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mini_autobot"
|
7
|
+
s.version = MiniAutobot::VERSION
|
8
|
+
s.authors = ["Ripta Pasay", "Peijie Hu", "RentPath"]
|
9
|
+
|
10
|
+
s.summary = %q{Web automation framework on minitest, selenium webdriver, and page objects.}
|
11
|
+
s.description = %q{Wrapper of minitest and selenium-webdriver that supports multiple webapps
|
12
|
+
and multiple OS/browser ui automation testing, ready to be integrated in
|
13
|
+
development pipeline with jenkins and saucelabs.}
|
14
|
+
s.homepage = "https://github.com/rentpath/autobots"
|
15
|
+
s.license = "MIT"
|
16
|
+
|
17
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
s.bindir = "bin"
|
19
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency 'activesupport', '~> 4.2'
|
23
|
+
s.add_dependency 'faker', '~> 1.4'
|
24
|
+
s.add_dependency 'google-api-client', '~> 0.8'
|
25
|
+
s.add_dependency 'google_drive', '~> 1.0'
|
26
|
+
s.add_dependency 'mail', '~> 2.6'
|
27
|
+
s.add_dependency 'minitap', '~> 0.5.3'
|
28
|
+
s.add_dependency 'pry', '~> 0.10'
|
29
|
+
s.add_dependency 'minitest', '~>5.4.0'
|
30
|
+
s.add_dependency 'selenium-webdriver', '~> 2.46'
|
31
|
+
s.add_dependency 'rest-client', '~> 1.8'
|
32
|
+
|
33
|
+
s.add_development_dependency 'rake'
|
34
|
+
s.add_development_dependency 'rspec', '~> 3.3.0'
|
35
|
+
s.add_development_dependency 'guard'
|
36
|
+
s.add_development_dependency 'guard-minitest'
|
37
|
+
s.add_development_dependency 'yard'
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,299 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mini_autobot
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ripta Pasay
|
8
|
+
- Peijie Hu
|
9
|
+
- RentPath
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '4.2'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '4.2'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: faker
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '1.4'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.4'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: google-api-client
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.8'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.8'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: google_drive
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '1.0'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '1.0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: mail
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.6'
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '2.6'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: minitap
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 0.5.3
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.5.3
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: pry
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0.10'
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0.10'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: minitest
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 5.4.0
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 5.4.0
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: selenium-webdriver
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - "~>"
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '2.46'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - "~>"
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '2.46'
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: rest-client
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - "~>"
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '1.8'
|
148
|
+
type: :runtime
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '1.8'
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: rake
|
157
|
+
requirement: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
type: :development
|
163
|
+
prerelease: false
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: rspec
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - "~>"
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: 3.3.0
|
176
|
+
type: :development
|
177
|
+
prerelease: false
|
178
|
+
version_requirements: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - "~>"
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: 3.3.0
|
183
|
+
- !ruby/object:Gem::Dependency
|
184
|
+
name: guard
|
185
|
+
requirement: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
type: :development
|
191
|
+
prerelease: false
|
192
|
+
version_requirements: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: guard-minitest
|
199
|
+
requirement: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - ">="
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '0'
|
204
|
+
type: :development
|
205
|
+
prerelease: false
|
206
|
+
version_requirements: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0'
|
211
|
+
- !ruby/object:Gem::Dependency
|
212
|
+
name: yard
|
213
|
+
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - ">="
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '0'
|
225
|
+
description: |-
|
226
|
+
Wrapper of minitest and selenium-webdriver that supports multiple webapps
|
227
|
+
and multiple OS/browser ui automation testing, ready to be integrated in
|
228
|
+
development pipeline with jenkins and saucelabs.
|
229
|
+
email:
|
230
|
+
executables:
|
231
|
+
- mini_autobot
|
232
|
+
extensions: []
|
233
|
+
extra_rdoc_files: []
|
234
|
+
files:
|
235
|
+
- ".gitignore"
|
236
|
+
- ".rspec"
|
237
|
+
- ".ruby-version"
|
238
|
+
- Gemfile
|
239
|
+
- Gemfile.lock
|
240
|
+
- LICENSE
|
241
|
+
- README.md
|
242
|
+
- bin/mini_autobot
|
243
|
+
- lib/mini_autobot.rb
|
244
|
+
- lib/mini_autobot/connector.rb
|
245
|
+
- lib/mini_autobot/console.rb
|
246
|
+
- lib/mini_autobot/emails.rb
|
247
|
+
- lib/mini_autobot/emails/mailbox.rb
|
248
|
+
- lib/mini_autobot/endeca/base.rb
|
249
|
+
- lib/mini_autobot/init.rb
|
250
|
+
- lib/mini_autobot/logger.rb
|
251
|
+
- lib/mini_autobot/page_objects.rb
|
252
|
+
- lib/mini_autobot/page_objects/base.rb
|
253
|
+
- lib/mini_autobot/page_objects/overlay/base.rb
|
254
|
+
- lib/mini_autobot/page_objects/widgets/base.rb
|
255
|
+
- lib/mini_autobot/parallel.rb
|
256
|
+
- lib/mini_autobot/runner.rb
|
257
|
+
- lib/mini_autobot/settings.rb
|
258
|
+
- lib/mini_autobot/test_case.rb
|
259
|
+
- lib/mini_autobot/test_cases.rb
|
260
|
+
- lib/mini_autobot/utils.rb
|
261
|
+
- lib/mini_autobot/utils/assertion_helper.rb
|
262
|
+
- lib/mini_autobot/utils/castable.rb
|
263
|
+
- lib/mini_autobot/utils/data_generator_helper.rb
|
264
|
+
- lib/mini_autobot/utils/endeca_helper.rb
|
265
|
+
- lib/mini_autobot/utils/loggable.rb
|
266
|
+
- lib/mini_autobot/utils/overlay_and_widget_helper.rb
|
267
|
+
- lib/mini_autobot/utils/page_object_helper.rb
|
268
|
+
- lib/mini_autobot/version.rb
|
269
|
+
- lib/minitap/minitest5_rent.rb
|
270
|
+
- lib/minitest/autobot_settings_plugin.rb
|
271
|
+
- lib/tapout/custom_reporters/fancy_tap_reporter.rb
|
272
|
+
- lib/yard/tagged_test_case_handler.rb
|
273
|
+
- mini_autobot.gemspec
|
274
|
+
homepage: https://github.com/rentpath/autobots
|
275
|
+
licenses:
|
276
|
+
- MIT
|
277
|
+
metadata: {}
|
278
|
+
post_install_message:
|
279
|
+
rdoc_options: []
|
280
|
+
require_paths:
|
281
|
+
- lib
|
282
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
283
|
+
requirements:
|
284
|
+
- - ">="
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: '0'
|
287
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
288
|
+
requirements:
|
289
|
+
- - ">="
|
290
|
+
- !ruby/object:Gem::Version
|
291
|
+
version: '0'
|
292
|
+
requirements: []
|
293
|
+
rubyforge_project:
|
294
|
+
rubygems_version: 2.2.2
|
295
|
+
signing_key:
|
296
|
+
specification_version: 4
|
297
|
+
summary: Web automation framework on minitest, selenium webdriver, and page objects.
|
298
|
+
test_files: []
|
299
|
+
has_rdoc:
|