howitzer 1.0.1 → 1.0.2
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 +4 -1
- data/.travis.yml +3 -2
- data/CHANGELOG.md +25 -5
- data/GETTING_STARTED.md +158 -13
- data/README.md +49 -32
- data/Rakefile +10 -1
- data/bin/howitzer +49 -78
- data/features/cli_help.feature +30 -0
- data/features/cli_new.feature +263 -0
- data/features/cli_unknown.feature +17 -0
- data/features/cli_version.feature +14 -0
- data/features/step_definitions/common_steps.rb +1 -0
- data/features/support/env.rb +1 -0
- data/features/support/transformers.rb +3 -0
- data/generators/base_generator.rb +2 -0
- data/generators/config/config_generator.rb +1 -1
- data/generators/config/templates/default.yml +4 -14
- data/generators/cucumber/cucumber_generator.rb +1 -1
- data/generators/cucumber/templates/cucumber.yml +1 -2
- data/generators/cucumber/templates/env.rb +8 -7
- data/generators/emails/emails_generator.rb +1 -1
- data/generators/pages/pages_generator.rb +1 -1
- data/generators/pages/templates/example_page.rb +2 -2
- data/generators/root/root_generator.rb +1 -1
- data/generators/root/templates/Gemfile +1 -1
- data/generators/rspec/rspec_generator.rb +1 -1
- data/generators/rspec/templates/example_spec.rb +2 -2
- data/generators/rspec/templates/rspec.rake +1 -1
- data/generators/rspec/templates/spec_helper.rb +6 -5
- data/generators/tasks/tasks_generator.rb +1 -1
- data/generators/tasks/templates/common.rake +1 -0
- data/howitzer.gemspec +8 -8
- data/lib/howitzer.rb +4 -1
- data/lib/howitzer/blank_page.rb +6 -0
- data/lib/howitzer/capybara/dsl_ex.rb +15 -0
- data/lib/howitzer/capybara/settings.rb +267 -0
- data/lib/howitzer/email.rb +134 -0
- data/lib/howitzer/exceptions.rb +18 -0
- data/lib/howitzer/helpers.rb +34 -23
- data/lib/howitzer/init.rb +1 -4
- data/lib/howitzer/mailgun/client.rb +48 -0
- data/lib/howitzer/mailgun/connector.rb +34 -0
- data/lib/howitzer/mailgun/response.rb +28 -0
- data/lib/howitzer/utils.rb +2 -2
- data/lib/howitzer/utils/data_generator/data_storage.rb +15 -2
- data/lib/howitzer/utils/data_generator/gen.rb +14 -10
- data/lib/howitzer/utils/locator_store.rb +14 -7
- data/lib/howitzer/utils/log.rb +2 -0
- data/lib/howitzer/utils/page_validator.rb +74 -27
- data/lib/howitzer/version.rb +1 -1
- data/lib/howitzer/web_page.rb +83 -32
- data/spec/config/default.yml +10 -12
- data/spec/spec_helper.rb +12 -0
- data/spec/support/mailgun_unit_client.rb +60 -0
- data/spec/unit/generators/generators_spec.rb +7 -7
- data/spec/unit/lib/capybara/dsl_ex_spec.rb +60 -0
- data/spec/unit/lib/{capybara_settings_spec.rb → capybara/settings_spec.rb} +16 -10
- data/spec/unit/lib/email_spec.rb +129 -0
- data/spec/unit/lib/helpers_spec.rb +160 -34
- data/spec/unit/lib/init_spec.rb +1 -12
- data/spec/unit/lib/mailgun/client_spec.rb +36 -0
- data/spec/unit/lib/mailgun/connector_spec.rb +70 -0
- data/spec/unit/lib/mailgun/response_spec.rb +29 -0
- data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +23 -5
- data/spec/unit/lib/utils/data_generator/gen_spec.rb +2 -63
- data/spec/unit/lib/utils/locator_store_spec.rb +41 -6
- data/spec/unit/lib/utils/log_spec.rb +1 -1
- data/spec/unit/lib/utils/page_validator_spec.rb +149 -25
- data/spec/unit/lib/web_page_spec.rb +127 -53
- metadata +102 -142
- data/lib/howitzer/utils/capybara_patched.rb +0 -23
- data/lib/howitzer/utils/capybara_settings.rb +0 -247
- data/lib/howitzer/utils/email/email.rb +0 -85
- data/lib/howitzer/utils/email/mail_client.rb +0 -132
- data/lib/howitzer/utils/email/mailgun.rb +0 -175
- data/lib/howitzer/utils/email/mailgun_helper.rb +0 -61
- data/spec/unit/bin/howitzer_spec.rb +0 -175
- data/spec/unit/lib/utils/email/email_spec.rb +0 -75
- data/spec/unit/lib/utils/email/mail_client_spec.rb +0 -115
- data/spec/unit/lib/utils/email/mailgun_helper_spec.rb +0 -95
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Howitzer CLI Version
|
2
|
+
|
3
|
+
Scenario Outline: Run with version global option
|
4
|
+
When I run `howitzer <option>`
|
5
|
+
Then the output should contain exactly:
|
6
|
+
"""
|
7
|
+
howitzer version <HOWITZER_VERSION>
|
8
|
+
|
9
|
+
"""
|
10
|
+
And the exit status should be 0
|
11
|
+
Examples:
|
12
|
+
| option |
|
13
|
+
| --version |
|
14
|
+
| -v |
|
@@ -0,0 +1 @@
|
|
1
|
+
# For custom stem definitions
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'aruba/cucumber'
|
@@ -19,7 +19,7 @@
|
|
19
19
|
# TEST ENVIRONMENTS SETTINGS #
|
20
20
|
###########################################################
|
21
21
|
|
22
|
-
# Specify one of the following drivers: selenium, selenium_dev, webkit, poltergeist, sauce, testingbot
|
22
|
+
# Specify one of the following drivers: selenium, selenium_dev, webkit, poltergeist, phantomjs, sauce, testingbot
|
23
23
|
driver: poltergeist
|
24
24
|
|
25
25
|
# -Selenium-
|
@@ -74,20 +74,10 @@
|
|
74
74
|
rawler_html_log: rawler_log.html # not implemented yet
|
75
75
|
|
76
76
|
###########################################################
|
77
|
-
#
|
77
|
+
# MAILGUN SETTINGS #
|
78
78
|
###########################################################
|
79
|
-
|
80
|
-
|
81
|
-
mail_smtp_domain: demo.com
|
82
|
-
mail_smtp_user_name: test_user
|
83
|
-
mail_smtp_user_pass: mypass
|
84
|
-
|
85
|
-
mail_pop3_server: pop.demo.com
|
86
|
-
mail_pop3_port: 995
|
87
|
-
mail_pop3_timeout: 120
|
88
|
-
mail_pop3_domain: ${mail_smtp_domain}
|
89
|
-
mail_pop3_user_name: test_user
|
90
|
-
mail_pop3_user_pass: mypass
|
79
|
+
mailgun_key: mailgun_account_private_key
|
80
|
+
mailgun_domain: mailgun_domain_with_stored_method
|
91
81
|
|
92
82
|
############################################################
|
93
83
|
# TIMEOUTS #
|
@@ -1,11 +1,10 @@
|
|
1
1
|
<%
|
2
2
|
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
3
3
|
rerun_opts = rerun.to_s.strip.empty? ? "--format progress features" : "--format pretty #{rerun}"
|
4
|
-
std_opts = "--verbose --expand --format html --out=./log/log.html --format junit --out=./log features --tags ~@wip --tags ~@bug"
|
4
|
+
std_opts = "--verbose --expand --format html --out=./log/log.html --format junit --out=./log --format pretty features --tags ~@wip --tags ~@bug"
|
5
5
|
%>
|
6
6
|
default: -r features <%= std_opts %> --tags ~@demo features
|
7
7
|
wip: -r features --tags @wip --wip features
|
8
8
|
demo: -r features <%= std_opts %> --tags @demo features
|
9
9
|
bug: -r features --tags @bug --wip features
|
10
|
-
none: --format pretty
|
11
10
|
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
|
@@ -2,7 +2,7 @@ require 'cucumber'
|
|
2
2
|
require 'capybara/cucumber'
|
3
3
|
require_relative '../../boot'
|
4
4
|
|
5
|
-
World(
|
5
|
+
World(Capybara::Settings)
|
6
6
|
World(DataGenerator)
|
7
7
|
|
8
8
|
log.settings_as_formatted_text
|
@@ -10,7 +10,7 @@ DataStorage.store('sauce', :start_time, Time.now.utc)
|
|
10
10
|
DataStorage.store('sauce', :status, true)
|
11
11
|
|
12
12
|
if sauce_driver?
|
13
|
-
Capybara.drivers[:sauce][].options[:desired_capabilities][:name] =
|
13
|
+
Capybara.drivers[:sauce][].options[:desired_capabilities][:name] = Capybara::Settings.suite_name
|
14
14
|
end
|
15
15
|
|
16
16
|
Before do |scenario|
|
@@ -20,19 +20,20 @@ Before do |scenario|
|
|
20
20
|
end
|
21
21
|
|
22
22
|
After do |scenario|
|
23
|
-
Gen.delete_all_mailboxes
|
24
23
|
if sauce_driver?
|
25
24
|
DataStorage.store('sauce', :status, false) if scenario.failed?
|
26
25
|
session_end = duration(Time.now.utc - DataStorage.extract('sauce', :start_time))
|
27
26
|
log.info "SAUCE VIDEO #@session_start - #{session_end} URL: #{sauce_resource_path('video.flv')}"
|
27
|
+
elsif ie_browser?
|
28
|
+
log.info 'IE reset session'
|
29
|
+
page.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
|
28
30
|
end
|
29
|
-
DataStorage.
|
31
|
+
DataStorage.clear_all_ns
|
30
32
|
end
|
31
33
|
|
32
34
|
at_exit do
|
33
35
|
if sauce_driver?
|
34
|
-
log.info "SAUCE SERVER LOG URL: #{
|
35
|
-
|
36
|
+
log.info "SAUCE SERVER LOG URL: #{Capybara::Settings.sauce_resource_path('selenium-server.log')}"
|
37
|
+
Capybara::Settings.update_sauce_job_status(passed: DataStorage.extract('sauce', :status))
|
36
38
|
end
|
37
|
-
Gen.delete_all_mailboxes
|
38
39
|
end
|
@@ -2,7 +2,7 @@ require_relative 'example_menu'
|
|
2
2
|
|
3
3
|
class ExamplePage < WebPage
|
4
4
|
URL = '/'
|
5
|
-
validates :url, pattern:
|
5
|
+
validates :url, pattern: /\A(?:.*?:\/\/)?[^\/]*\/?\z/
|
6
6
|
|
7
7
|
add_field_locator :search_input, 'lst-ib'
|
8
8
|
add_button_locator :search_btn, 'btnK'
|
@@ -12,4 +12,4 @@ class ExamplePage < WebPage
|
|
12
12
|
def fill_keyword(data)
|
13
13
|
fill_in field_locator(:search_input), data
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
@@ -9,7 +9,7 @@ TEST_TYPES = [:all, :health, :bvt, :p1]
|
|
9
9
|
TEST_AREAS = []
|
10
10
|
|
11
11
|
namespace :rspec do
|
12
|
-
std_opts = "--format html --out=./#{settings.log_dir}/#{settings.html_log}"
|
12
|
+
std_opts = "--format html --out=./#{settings.log_dir}/#{settings.html_log} --format documentation --color"
|
13
13
|
TEST_TYPES.each do |type|
|
14
14
|
RakeTask.new(type) do |s|
|
15
15
|
s.send :desc, "Run all #{"'#{s.name}' " unless type == :all}tests"
|
@@ -8,7 +8,7 @@ RSpec.configure do |config|
|
|
8
8
|
DataStorage.store('sauce', :start_time, Time.now.utc)
|
9
9
|
DataStorage.store('sauce', :status, true)
|
10
10
|
|
11
|
-
config.include
|
11
|
+
config.include Capybara::Settings
|
12
12
|
config.include Capybara::RSpecMatchers
|
13
13
|
config.include DataGenerator
|
14
14
|
|
@@ -31,18 +31,20 @@ RSpec.configure do |config|
|
|
31
31
|
end
|
32
32
|
|
33
33
|
config.after(:each) do
|
34
|
-
|
35
|
-
DataStorage.clear_ns("user")
|
34
|
+
DataStorage.clear_all_ns
|
36
35
|
if sauce_driver?
|
37
36
|
session_end = duration(Time.now.utc - DataStorage.extract('sauce', :start_time))
|
38
37
|
log.info "SAUCE VIDEO #@session_start - #{session_end} URL: #{sauce_resource_path('video.flv')}"
|
38
|
+
elsif ie_browser?
|
39
|
+
log.info 'IE reset session'
|
40
|
+
page.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
44
|
config.after(:suite) do
|
43
45
|
if sauce_driver?
|
44
46
|
report_failures_count = config.reporter.instance_variable_get(:@failure_count)
|
45
|
-
DataStorage.store('sauce', :status, report_failures_count.zero?)
|
47
|
+
DataStorage.store('sauce', :status, report_failures_count.zero?)
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
@@ -51,6 +53,5 @@ RSpec.configure do |config|
|
|
51
53
|
log.info "SAUCE SERVER LOG URL: #{CapybaraSettings.sauce_resource_path('selenium-server.log')}"
|
52
54
|
CapybaraSettings.update_sauce_job_status(passed: DataStorage.extract('sauce', :status))
|
53
55
|
end
|
54
|
-
Gen.delete_all_mailboxes
|
55
56
|
end
|
56
57
|
end
|
data/howitzer.gemspec
CHANGED
@@ -4,9 +4,9 @@ require File.expand_path('../lib/howitzer/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Roman Parashchenko, Konstantin Lynda, Nikolay Zozulyak"]
|
6
6
|
gem.email = ["strongqa@gmail.com"]
|
7
|
-
gem.description = %q{
|
8
|
-
gem.summary = %q{
|
9
|
-
gem.homepage = "https://github.com/
|
7
|
+
gem.description = %q{Howitzer allows to generate a test project in 5 minutes. It uses the best practices and design patterns. It has out-of-the-box configurations for parallel cross-browser testing in the Cloud.}
|
8
|
+
gem.summary = %q{Ruby based framework for acceptance testing}
|
9
|
+
gem.homepage = "https://github.com/strongqa/howitzer"
|
10
10
|
|
11
11
|
gem.bindir = 'bin'
|
12
12
|
gem.files = `git ls-files`.split($\)
|
@@ -17,7 +17,9 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.version = Howitzer::VERSION
|
18
18
|
gem.required_ruby_version = '>= 1.9.3'
|
19
19
|
|
20
|
+
gem.add_runtime_dependency 'nokogiri', '~> 1.6.2.rc2' if gem.platform.to_s =~ /mswin|mingw/
|
20
21
|
gem.add_runtime_dependency 'rake'
|
22
|
+
gem.add_runtime_dependency 'gli'
|
21
23
|
gem.add_runtime_dependency 'i18n'
|
22
24
|
gem.add_runtime_dependency 'syntax'
|
23
25
|
gem.add_runtime_dependency 'cucumber'
|
@@ -25,19 +27,17 @@ Gem::Specification.new do |gem|
|
|
25
27
|
gem.add_runtime_dependency 'sexy_settings'
|
26
28
|
gem.add_runtime_dependency 'repeater'
|
27
29
|
gem.add_runtime_dependency 'launchy'
|
28
|
-
gem.add_runtime_dependency 'log4r'
|
29
|
-
gem.add_runtime_dependency 'mail'
|
30
|
+
gem.add_runtime_dependency 'log4r', '1.1.10'
|
30
31
|
gem.add_runtime_dependency 'rest-client'
|
31
32
|
gem.add_runtime_dependency 'poltergeist'
|
32
33
|
gem.add_runtime_dependency 'rawler'
|
33
34
|
gem.add_runtime_dependency 'capybara'
|
34
35
|
gem.add_runtime_dependency 'selenium-webdriver'
|
35
|
-
gem.add_runtime_dependency '
|
36
|
+
gem.add_runtime_dependency 'activesupport', '~>4.0'
|
36
37
|
gem.add_runtime_dependency 'testingbot'
|
37
38
|
|
38
|
-
gem.add_development_dependency(
|
39
|
+
gem.add_development_dependency('aruba')
|
39
40
|
gem.add_development_dependency("fuubar", [">= 0.0.1"])
|
40
|
-
gem.add_development_dependency("rake")
|
41
41
|
gem.add_development_dependency("ffaker")
|
42
42
|
|
43
43
|
end
|
data/lib/howitzer.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require "howitzer/version"
|
2
2
|
require "howitzer/settings"
|
3
|
+
require 'howitzer/capybara/settings'
|
3
4
|
require 'howitzer/utils'
|
4
5
|
require 'howitzer/init'
|
5
6
|
require 'howitzer/helpers'
|
6
|
-
require 'howitzer/
|
7
|
+
require 'howitzer/email'
|
8
|
+
require 'howitzer/web_page'
|
9
|
+
require 'howitzer/blank_page'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'capybara'
|
2
|
+
module Howitzer
|
3
|
+
module Capybara
|
4
|
+
module DslEx
|
5
|
+
include ::Capybara::DSL
|
6
|
+
|
7
|
+
# It flattens arguments of all DSL methods to support locator store DSL
|
8
|
+
::Capybara::Session::DSL_METHODS.each do |method|
|
9
|
+
define_method method do |*args, &block|
|
10
|
+
super(*args.map{|el| args.first == el && el.respond_to?(:flatten) ? el.flatten : el}.flatten, &block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,267 @@
|
|
1
|
+
##
|
2
|
+
#
|
3
|
+
# Predefined Capybara settings and capybara drivers
|
4
|
+
#
|
5
|
+
require 'selenium-webdriver'
|
6
|
+
require 'capybara'
|
7
|
+
require 'howitzer/utils/log'
|
8
|
+
module Capybara
|
9
|
+
module Settings
|
10
|
+
extend self
|
11
|
+
|
12
|
+
##
|
13
|
+
#
|
14
|
+
# Predefined settings of Firefox browser
|
15
|
+
#
|
16
|
+
# *Returns:*
|
17
|
+
# * +Hash+ - Settings that can be changed
|
18
|
+
#
|
19
|
+
|
20
|
+
|
21
|
+
def self.base_ff_profile_settings
|
22
|
+
profile = ::Selenium::WebDriver::Firefox::Profile.new
|
23
|
+
profile["network.http.phishy-userpass-length"] = 255
|
24
|
+
profile["browser.safebrowsing.malware.enabled"] = false
|
25
|
+
profile["network.automatic-ntlm-auth.allow-non-fqdn"] = true
|
26
|
+
profile["network.ntlm.send-lm-response"] = true
|
27
|
+
profile["network.automatic-ntlm-auth.trusted-uris"] = settings.app_host
|
28
|
+
profile
|
29
|
+
end
|
30
|
+
|
31
|
+
class << self
|
32
|
+
|
33
|
+
##
|
34
|
+
#
|
35
|
+
#Defines driver based on specified test environment settings
|
36
|
+
#
|
37
|
+
|
38
|
+
def define_driver
|
39
|
+
case settings.driver.to_sym
|
40
|
+
when :selenium
|
41
|
+
define_selenium_driver
|
42
|
+
when :selenium_dev
|
43
|
+
define_selenium_dev_driver
|
44
|
+
when :webkit
|
45
|
+
define_webkit_driver
|
46
|
+
when :poltergeist
|
47
|
+
define_poltergeist_driver
|
48
|
+
when :phantomjs
|
49
|
+
define_phantomjs_driver
|
50
|
+
when :sauce
|
51
|
+
define_sauce_driver
|
52
|
+
when :testingbot
|
53
|
+
define_testingbot_driver
|
54
|
+
else
|
55
|
+
log.error "Unknown '#{settings.driver}' driver. Check your settings, it should be one of [selenium, selenium_dev, webkit, poltergeist, phantomjs, sauce, testingbot]"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def define_selenium_driver
|
62
|
+
Capybara.register_driver :selenium do |app|
|
63
|
+
params = {browser: settings.sel_browser.to_sym}
|
64
|
+
params[:profile] = base_ff_profile_settings if ff_browser?
|
65
|
+
Capybara::Selenium::Driver.new app, params
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def define_selenium_dev_driver
|
70
|
+
Capybara.register_driver :selenium_dev do |app|
|
71
|
+
profile = base_ff_profile_settings
|
72
|
+
vendor_dir = settings.custom_vendor_dir || File.join(File.dirname(__FILE__), '..', 'vendor')
|
73
|
+
log.error "Vendor directory was not found('#{vendor_dir}')." unless Dir.exist?(vendor_dir)
|
74
|
+
%w(firebug*.xpi firepath*.xpi).each do |file_name|
|
75
|
+
full_path_pattern = File.join(File.expand_path(vendor_dir), file_name)
|
76
|
+
if (full_path = Dir[full_path_pattern].first)
|
77
|
+
profile.add_extension full_path
|
78
|
+
else
|
79
|
+
log.error "Extension was not found by '#{full_path_pattern}' pattern!"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
profile['extensions.firebug.currentVersion'] = 'Last' # avoid 'first run' tab
|
83
|
+
profile["extensions.firebug.previousPlacement"] = 1
|
84
|
+
profile["extensions.firebug.onByDefault"] = true
|
85
|
+
profile["extensions.firebug.defaultPanelName"] = "firepath"
|
86
|
+
profile["extensions.firebug.script.enableSites"] = true
|
87
|
+
profile["extensions.firebug.net.enableSites"] = true
|
88
|
+
profile["extensions.firebug.console.enableSites"] = true
|
89
|
+
|
90
|
+
Capybara::Selenium::Driver.new app, browser: :firefox, profile: profile
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def define_webkit_driver
|
95
|
+
require 'capybara-webkit'
|
96
|
+
end
|
97
|
+
|
98
|
+
def define_poltergeist_driver
|
99
|
+
require 'capybara/poltergeist'
|
100
|
+
Capybara.register_driver :poltergeist do |app|
|
101
|
+
Capybara::Poltergeist::Driver.new(
|
102
|
+
app, {
|
103
|
+
js_errors: !settings.pjs_ignore_js_errors,
|
104
|
+
phantomjs_options: ["--ignore-ssl-errors=#{settings.pjs_ignore_ssl_errors ? 'yes' : 'no'}" ]
|
105
|
+
}
|
106
|
+
)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def define_phantomjs_driver
|
111
|
+
Capybara.register_driver :phantomjs do |app|
|
112
|
+
Capybara::Selenium::Driver.new(
|
113
|
+
app, browser: :phantomjs,
|
114
|
+
desired_capabilities: {
|
115
|
+
javascript_enabled: !settings.pjs_ignore_js_errors
|
116
|
+
},
|
117
|
+
args: ["--ignore-ssl-errors=#{settings.pjs_ignore_ssl_errors ? 'yes' : 'no'}" ]
|
118
|
+
)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def define_sauce_driver
|
123
|
+
task_name = ENV['RAKE_TASK'].to_s.sub(/(?:r?spec|cucumber):?(.*)/, '\1').upcase
|
124
|
+
caps_opts = {
|
125
|
+
platform: settings.sl_platform,
|
126
|
+
browser_name: settings.sl_browser_name,
|
127
|
+
name: "#{ENV['RAKE_TASK'] ? (task_name.empty? ? 'ALL' : task_name) : 'CUSTOM'} #{settings.sl_browser_name.upcase}",
|
128
|
+
"max-duration" => settings.sl_max_duration,
|
129
|
+
'idle-timeout' => settings.sl_idle_timeout,
|
130
|
+
'selenium-version' => settings.sl_selenium_version,
|
131
|
+
'record-screenshots' => settings.sl_record_screenshot,
|
132
|
+
'video-upload-on-pass' => settings.sl_video_upload_on_pass
|
133
|
+
}
|
134
|
+
|
135
|
+
unless (settings.sl_browser_version.to_s || "").empty?
|
136
|
+
caps_opts['version'] = settings.sl_browser_version.to_s
|
137
|
+
end
|
138
|
+
|
139
|
+
options = {
|
140
|
+
url: settings.sl_url,
|
141
|
+
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.new(caps_opts),
|
142
|
+
http_client: ::Selenium::WebDriver::Remote::Http::Default.new.tap{|c| c.timeout = settings.timeout_medium},
|
143
|
+
browser: :remote
|
144
|
+
}
|
145
|
+
|
146
|
+
Capybara.register_driver :sauce do |app|
|
147
|
+
driver = Capybara::Selenium::Driver.new(app, options)
|
148
|
+
driver.browser.file_detector = lambda do |args|
|
149
|
+
str = args.first.to_s
|
150
|
+
str if File.exist?(str)
|
151
|
+
end
|
152
|
+
driver
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def define_testingbot_driver
|
157
|
+
require 'testingbot'
|
158
|
+
task_name = ENV['RAKE_TASK'].to_s.sub(/(?:r?spec|cucumber):?(.*)/, '\1').upcase
|
159
|
+
caps_opts = {
|
160
|
+
platform: settings.tb_platform,
|
161
|
+
browser_name: settings.tb_browser_name,
|
162
|
+
name: "#{ENV['RAKE_TASK'] ? (task_name.empty? ? 'ALL' : task_name) : 'CUSTOM'} #{settings.tb_browser_name.upcase}",
|
163
|
+
maxduration: settings.tb_max_duration.to_i,
|
164
|
+
idletimeout: settings.tb_idle_timeout.to_i,
|
165
|
+
'selenium-version' => settings.tb_selenium_version,
|
166
|
+
screenshot: settings.tb_record_screenshot,
|
167
|
+
'avoid-proxy' => settings.tb_avoid_proxy
|
168
|
+
}
|
169
|
+
|
170
|
+
unless (settings.tb_browser_version.to_s || "").empty?
|
171
|
+
caps_opts['version'] = settings.tb_browser_version.to_s
|
172
|
+
end
|
173
|
+
options = {
|
174
|
+
url: settings.tb_url,
|
175
|
+
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.new(caps_opts),
|
176
|
+
http_client: ::Selenium::WebDriver::Remote::Http::Default.new.tap{|c| c.timeout = settings.timeout_medium},
|
177
|
+
browser: :remote
|
178
|
+
}
|
179
|
+
Capybara.register_driver :testingbot do |app|
|
180
|
+
driver = Capybara::Selenium::Driver.new(app, options)
|
181
|
+
driver.browser.file_detector = lambda do |args|
|
182
|
+
str = args.first.to_s
|
183
|
+
str if File.exist?(str)
|
184
|
+
end
|
185
|
+
driver
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
##
|
191
|
+
#
|
192
|
+
# Returns url of current Sauce Labs job
|
193
|
+
#
|
194
|
+
# *Parameters:*
|
195
|
+
# * +name+ - Your account name
|
196
|
+
#
|
197
|
+
# *Returns:*
|
198
|
+
# * +string+ - URL address of last running Sauce Labs job
|
199
|
+
#
|
200
|
+
|
201
|
+
def sauce_resource_path(name)
|
202
|
+
host = "https://#{settings.sl_user}:#{settings.sl_api_key}@saucelabs.com"
|
203
|
+
path = "/rest/#{settings.sl_user}/jobs/#{session_id}/results/#{name}"
|
204
|
+
"#{host}#{path}"
|
205
|
+
end
|
206
|
+
|
207
|
+
##
|
208
|
+
#
|
209
|
+
# Sends http request to change current Sauce Labs job status - pass/fail
|
210
|
+
#
|
211
|
+
# *Parameters:*
|
212
|
+
# * +json_data+ - test status as hash (for details see Saucelab documentation)
|
213
|
+
#
|
214
|
+
|
215
|
+
|
216
|
+
def update_sauce_job_status(json_data = {})
|
217
|
+
host = "http://#{settings.sl_user}:#{settings.sl_api_key}@saucelabs.com"
|
218
|
+
path = "/rest/v1/#{settings.sl_user}/jobs/#{session_id}"
|
219
|
+
url = "#{host}#{path}"
|
220
|
+
::RestClient.put url, json_data.to_json, content_type: :json, accept: :json
|
221
|
+
end
|
222
|
+
|
223
|
+
##
|
224
|
+
#
|
225
|
+
# Returns custom name for Sauce Labs job
|
226
|
+
#
|
227
|
+
# *Returns:*
|
228
|
+
# * +string+ - Return name of current Sauce Labs job
|
229
|
+
#
|
230
|
+
|
231
|
+
def suite_name
|
232
|
+
res = if ENV['RAKE_TASK']
|
233
|
+
res = ENV['RAKE_TASK'].sub(/(?:r?spec|cucumber):?(.*)/, '\1').upcase
|
234
|
+
res.empty? ? 'ALL' : res
|
235
|
+
else
|
236
|
+
'CUSTOM'
|
237
|
+
end
|
238
|
+
"#{res} #{settings.sl_browser_name.upcase}"
|
239
|
+
end
|
240
|
+
|
241
|
+
##
|
242
|
+
#
|
243
|
+
# Returns current session id
|
244
|
+
#
|
245
|
+
|
246
|
+
def session_id
|
247
|
+
Capybara.current_session.driver.browser.instance_variable_get(:@bridge).session_id
|
248
|
+
end
|
249
|
+
|
250
|
+
Capybara.run_server = false
|
251
|
+
Capybara.app_host = ''
|
252
|
+
Capybara.default_wait_time = settings.timeout_small
|
253
|
+
Capybara.ignore_hidden_elements = true
|
254
|
+
Capybara.visible_text_only = true
|
255
|
+
Capybara.match = :one
|
256
|
+
Capybara.exact_options = true
|
257
|
+
Capybara.default_driver = settings.driver.to_sym
|
258
|
+
Capybara.javascript_driver = settings.driver.to_sym
|
259
|
+
|
260
|
+
define_driver
|
261
|
+
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
# @deprecated
|
266
|
+
#
|
267
|
+
CapybaraSettings = Capybara::Settings
|