howitzer 1.1.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +32 -0
- data/.travis.yml +1 -4
- data/.yardopts +1 -2
- data/CHANGELOG.md +28 -1
- data/Gemfile +6 -0
- data/LICENSE +1 -1
- data/README.md +55 -85
- data/Rakefile +7 -7
- data/bin/howitzer +56 -31
- data/features/cli_new.feature +162 -79
- data/features/cli_update.feature +114 -21
- data/features/step_definitions/common_steps.rb +29 -9
- data/features/support/env.rb +1 -1
- data/features/support/transformers.rb +2 -2
- data/generators/base_generator.rb +121 -49
- data/generators/config/config_generator.rb +8 -5
- data/generators/config/templates/boot.rb +14 -0
- data/generators/config/templates/capybara.rb +156 -0
- data/generators/config/templates/custom.yml +2 -3
- data/generators/config/templates/default.yml +50 -82
- data/generators/cucumber/cucumber_generator.rb +9 -9
- data/generators/cucumber/templates/common_steps.rb +4 -4
- data/generators/cucumber/templates/cucumber.rake +63 -54
- data/generators/cucumber/templates/env.rb +24 -23
- data/generators/cucumber/templates/transformers.rb +23 -15
- data/generators/emails/emails_generator.rb +4 -2
- data/generators/emails/templates/example_email.rb +4 -4
- data/generators/prerequisites/prerequisites_generator.rb +24 -0
- data/generators/prerequisites/templates/base.rb +22 -0
- data/generators/prerequisites/templates/factory_girl.rb +30 -0
- data/generators/prerequisites/templates/user.rb +7 -0
- data/generators/prerequisites/templates/users.rb +12 -0
- data/generators/root/root_generator.rb +11 -7
- data/generators/root/templates/.rubocop.yml +32 -0
- data/generators/root/templates/Gemfile.erb +27 -0
- data/generators/root/templates/Rakefile +6 -8
- data/generators/rspec/rspec_generator.rb +7 -7
- data/generators/rspec/templates/example_spec.rb +1 -1
- data/generators/rspec/templates/rspec.rake +48 -29
- data/generators/rspec/templates/spec_helper.rb +33 -32
- data/generators/tasks/tasks_generator.rb +4 -2
- data/generators/tasks/templates/common.rake +1 -16
- data/generators/turnip/templates/.rspec +1 -0
- data/generators/turnip/templates/common_steps.rb +25 -0
- data/generators/turnip/templates/example.feature +8 -0
- data/generators/turnip/templates/spec_helper.rb +56 -0
- data/generators/turnip/templates/turnip.rake +61 -0
- data/generators/turnip/templates/turnip_helper.rb +6 -0
- data/generators/turnip/turnip_generator.rb +26 -0
- data/generators/web/templates/example_page.rb +15 -0
- data/generators/web/templates/menu_section.rb +13 -0
- data/generators/web/web_generator.rb +22 -0
- data/howitzer.gemspec +14 -21
- data/lib/howitzer.rb +47 -7
- data/lib/howitzer/cache.rb +70 -0
- data/lib/howitzer/capybara_helpers.rb +194 -0
- data/lib/howitzer/email.rb +96 -104
- data/lib/howitzer/exceptions.rb +10 -6
- data/lib/howitzer/log.rb +120 -0
- data/lib/howitzer/mail_adapters.rb +7 -0
- data/lib/howitzer/mail_adapters/abstract.rb +84 -0
- data/lib/howitzer/mail_adapters/mailgun.rb +115 -0
- data/lib/howitzer/mailgun_api.rb +9 -0
- data/lib/howitzer/mailgun_api/client.rb +79 -0
- data/lib/howitzer/mailgun_api/connector.rb +37 -0
- data/lib/howitzer/mailgun_api/response.rb +28 -0
- data/lib/howitzer/tasks/framework.rake +2 -2
- data/lib/howitzer/utils.rb +7 -1
- data/lib/howitzer/utils/string_extensions.rb +66 -0
- data/lib/howitzer/version.rb +2 -1
- data/lib/howitzer/web.rb +11 -0
- data/lib/howitzer/web/base_section.rb +27 -0
- data/lib/howitzer/web/blank_page.rb +12 -0
- data/lib/howitzer/web/capybara_methods_proxy.rb +29 -0
- data/lib/howitzer/web/element_dsl.rb +109 -0
- data/lib/howitzer/web/iframe_dsl.rb +93 -0
- data/lib/howitzer/web/page.rb +173 -0
- data/lib/howitzer/web/page_dsl.rb +64 -0
- data/lib/howitzer/web/page_validator.rb +118 -0
- data/lib/howitzer/web/section.rb +27 -0
- data/lib/howitzer/web/section_dsl.rb +154 -0
- data/spec/config/custom.yml +10 -1
- data/spec/spec_helper.rb +37 -19
- data/spec/support/generator_helper.rb +12 -11
- data/spec/support/logger_helper.rb +10 -9
- data/spec/support/mailgun_unit_client.rb +52 -44
- data/spec/support/shared_examples/capybara_context_holder.rb +33 -0
- data/spec/support/shared_examples/capybara_methods_proxy.rb +94 -0
- data/spec/support/shared_examples/dynamic_section_methods.rb +35 -0
- data/spec/support/shared_examples/element_dsl.rb +119 -0
- data/spec/unit/generators/base_generator_spec.rb +64 -33
- data/spec/unit/generators/config_generator_spec.rb +11 -7
- data/spec/unit/generators/cucumber_generator_spec.rb +26 -17
- data/spec/unit/generators/emails_generator_spec.rb +10 -6
- data/spec/unit/generators/prerequisites_generator_spec.rb +53 -0
- data/spec/unit/generators/root_generator_spec.rb +50 -13
- data/spec/unit/generators/rspec_generator_spec.rb +9 -9
- data/spec/unit/generators/tasks_generator_spec.rb +6 -6
- data/spec/unit/generators/turnip_generator_spec.rb +52 -0
- data/spec/unit/generators/web_generator_spec.rb +52 -0
- data/spec/unit/lib/cache_spec.rb +85 -0
- data/spec/unit/lib/capybara_helpers_spec.rb +696 -0
- data/spec/unit/lib/email_spec.rb +104 -91
- data/spec/unit/lib/howitzer.rb +31 -0
- data/spec/unit/lib/init_spec.rb +0 -1
- data/spec/unit/lib/log_spec.rb +122 -0
- data/spec/unit/lib/mail_adapters/abstract_spec.rb +62 -0
- data/spec/unit/lib/mail_adapters/mailgun_spec.rb +163 -0
- data/spec/unit/lib/mailgun_api/client_spec.rb +58 -0
- data/spec/unit/lib/mailgun_api/connector_spec.rb +54 -0
- data/spec/unit/lib/mailgun_api/response_spec.rb +28 -0
- data/spec/unit/lib/utils/string_extensions_spec.rb +77 -0
- data/spec/unit/lib/web/base_section_spec.rb +41 -0
- data/spec/unit/lib/web/element_dsl_spec.rb +17 -0
- data/spec/unit/lib/web/iframe_dsl_spec.rb +99 -0
- data/spec/unit/lib/web/page_dsl_spec.rb +52 -0
- data/spec/unit/lib/web/page_spec.rb +304 -0
- data/spec/unit/lib/web/page_validator_spec.rb +218 -0
- data/spec/unit/lib/web/section_dsl_spec.rb +165 -0
- data/spec/unit/lib/web/section_spec.rb +61 -0
- data/spec/unit/version_spec.rb +1 -1
- metadata +116 -203
- data/GETTING_STARTED.md +0 -774
- data/generators/cucumber/templates/cucumber.yml +0 -10
- data/generators/pages/pages_generator.rb +0 -21
- data/generators/pages/templates/example_menu.rb +0 -15
- data/generators/pages/templates/example_page.rb +0 -15
- data/generators/root/templates/Gemfile +0 -7
- data/generators/root/templates/boot.rb +0 -10
- data/lib/howitzer/blank_page.rb +0 -6
- data/lib/howitzer/capybara/dsl_ex.rb +0 -15
- data/lib/howitzer/capybara/settings.rb +0 -343
- data/lib/howitzer/helpers.rb +0 -230
- data/lib/howitzer/init.rb +0 -1
- data/lib/howitzer/mailgun/client.rb +0 -65
- data/lib/howitzer/mailgun/connector.rb +0 -34
- data/lib/howitzer/mailgun/response.rb +0 -28
- data/lib/howitzer/patches/rawler_patched.rb +0 -86
- data/lib/howitzer/settings.rb +0 -27
- data/lib/howitzer/utils/data_generator/data_storage.rb +0 -88
- data/lib/howitzer/utils/data_generator/gen.rb +0 -135
- data/lib/howitzer/utils/locator_store.rb +0 -217
- data/lib/howitzer/utils/log.rb +0 -139
- data/lib/howitzer/utils/page_validator.rb +0 -133
- data/lib/howitzer/vendor/firebug-1.12.1-fx.xpi +0 -0
- data/lib/howitzer/vendor/firepath-0.9.7-fx.xpi +0 -0
- data/lib/howitzer/web_page.rb +0 -253
- data/spec/active_resource.rb +0 -0
- data/spec/config/default.yml +0 -26
- data/spec/support/boot_helper.rb +0 -15
- data/spec/unit/generators/pages_generator_spec.rb +0 -33
- data/spec/unit/lib/capybara/dsl_ex_spec.rb +0 -60
- data/spec/unit/lib/capybara/settings_spec.rb +0 -441
- data/spec/unit/lib/helpers_spec.rb +0 -1129
- data/spec/unit/lib/mailgun/client_spec.rb +0 -36
- data/spec/unit/lib/mailgun/connector_spec.rb +0 -70
- data/spec/unit/lib/mailgun/response_spec.rb +0 -28
- data/spec/unit/lib/settings_spec.rb +0 -17
- data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +0 -80
- data/spec/unit/lib/utils/data_generator/gen_spec.rb +0 -90
- data/spec/unit/lib/utils/locator_store_spec.rb +0 -157
- data/spec/unit/lib/utils/log_spec.rb +0 -107
- data/spec/unit/lib/utils/page_validator_spec.rb +0 -265
- data/spec/unit/lib/web_page_spec.rb +0 -346
@@ -1,10 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
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 --format pretty features --tags ~@wip --tags ~@bug"
|
5
|
-
%>
|
6
|
-
default: -r features <%= std_opts %> --tags ~@demo features
|
7
|
-
wip: -r features --tags @wip --wip features
|
8
|
-
demo: -r features <%= std_opts %> --tags @demo features
|
9
|
-
bug: -r features --tags @bug --wip features
|
10
|
-
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require_relative '../base_generator'
|
2
|
-
|
3
|
-
module Howitzer
|
4
|
-
class PagesGenerator < BaseGenerator
|
5
|
-
def manifest
|
6
|
-
{ files:
|
7
|
-
[
|
8
|
-
{ source: 'example_page.rb', destination: 'pages/example_page.rb'},
|
9
|
-
{ source: 'example_menu.rb', destination: 'pages/example_menu.rb'}
|
10
|
-
]
|
11
|
-
}
|
12
|
-
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
def banner
|
16
|
-
<<-EOS
|
17
|
-
* PageOriented pattern structure generation ...
|
18
|
-
EOS
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module ExampleMenu
|
2
|
-
|
3
|
-
def self.included(base)
|
4
|
-
base.class_eval do
|
5
|
-
add_locator :menu_button, ".menuButton"
|
6
|
-
add_locator :account, xpath: ".//*[@id='metaMenu']//a[contains(., 'Account')]"
|
7
|
-
add_locator :log_out, xpath: ".//*[@id='metaMenu']//a[contains(., 'Log Out')]"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def open_menu
|
12
|
-
log.info "Open menu"
|
13
|
-
click_link locator(:menu_button)
|
14
|
-
end
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require_relative 'example_menu'
|
2
|
-
|
3
|
-
class ExamplePage < WebPage
|
4
|
-
URL = '/'
|
5
|
-
validates :url, pattern: /\A(?:.*?:\/\/)?[^\/]*\/?\z/
|
6
|
-
|
7
|
-
add_field_locator :search_input, 'lst-ib'
|
8
|
-
add_button_locator :search_btn, 'btnK'
|
9
|
-
|
10
|
-
include ExampleMenu
|
11
|
-
|
12
|
-
def fill_keyword(data)
|
13
|
-
fill_in field_locator(:search_input), data
|
14
|
-
end
|
15
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Uncomment it if you are going to use 'webkit' driver. QT library should be installed. See https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit
|
4
|
-
#
|
5
|
-
# gem 'capybara-webkit'
|
6
|
-
|
7
|
-
gem 'howitzer'
|
@@ -1,10 +0,0 @@
|
|
1
|
-
Dir.chdir(File.join(File.dirname(__FILE__), '.'))
|
2
|
-
|
3
|
-
def settings
|
4
|
-
SexySettings::Base.instance()
|
5
|
-
end
|
6
|
-
|
7
|
-
require 'howitzer'
|
8
|
-
|
9
|
-
Dir[File.join(File.dirname(__FILE__), "./emails/**/*.rb")].each {|f| require f}
|
10
|
-
Dir[File.join(File.dirname(__FILE__), "./pages/**/*.rb")].each {|f| require f}
|
data/lib/howitzer/blank_page.rb
DELETED
@@ -1,15 +0,0 @@
|
|
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
|
@@ -1,343 +0,0 @@
|
|
1
|
-
require 'selenium-webdriver'
|
2
|
-
require 'capybara'
|
3
|
-
require 'howitzer/utils/log'
|
4
|
-
require 'howitzer/helpers'
|
5
|
-
module Capybara
|
6
|
-
module Settings
|
7
|
-
extend self
|
8
|
-
|
9
|
-
##
|
10
|
-
#
|
11
|
-
# Predefined settings of Firefox browser
|
12
|
-
#
|
13
|
-
# *Returns:*
|
14
|
-
# * +Hash+ - Settings that can be changed
|
15
|
-
#
|
16
|
-
|
17
|
-
|
18
|
-
def self.base_ff_profile_settings
|
19
|
-
profile = ::Selenium::WebDriver::Firefox::Profile.new
|
20
|
-
profile['network.http.phishy-userpass-length'] = 255
|
21
|
-
profile['browser.safebrowsing.malware.enabled'] = false
|
22
|
-
profile['network.automatic-ntlm-auth.allow-non-fqdn'] = true
|
23
|
-
profile['network.ntlm.send-lm-response'] = true
|
24
|
-
profile['network.automatic-ntlm-auth.trusted-uris'] = settings.app_host
|
25
|
-
profile
|
26
|
-
end
|
27
|
-
|
28
|
-
class << self
|
29
|
-
|
30
|
-
##
|
31
|
-
#
|
32
|
-
#Defines driver based on specified test environment settings
|
33
|
-
#
|
34
|
-
|
35
|
-
def define_driver
|
36
|
-
case settings.driver.to_s.to_sym
|
37
|
-
when :selenium
|
38
|
-
define_selenium_driver
|
39
|
-
when :selenium_dev
|
40
|
-
define_selenium_dev_driver
|
41
|
-
when :webkit
|
42
|
-
define_webkit_driver
|
43
|
-
when :poltergeist
|
44
|
-
define_poltergeist_driver
|
45
|
-
when :phantomjs
|
46
|
-
define_phantomjs_driver
|
47
|
-
when :sauce
|
48
|
-
define_sauce_driver
|
49
|
-
when :testingbot
|
50
|
-
define_testingbot_driver
|
51
|
-
when :browserstack
|
52
|
-
define_browserstack_driver
|
53
|
-
when :selenium_grid
|
54
|
-
define_selenium_grid_driver
|
55
|
-
else
|
56
|
-
log.error "Unknown '#{settings.driver}' driver. Check your settings, it should be one of [selenium, selenium_grid, selenium_dev, webkit, poltergeist, phantomjs, sauce, testingbot, browserstack]"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
def define_selenium_grid_driver
|
62
|
-
Capybara.register_driver :selenium_grid do |app|
|
63
|
-
caps = if ie_browser?
|
64
|
-
::Selenium::WebDriver::Remote::Capabilities.internet_explorer
|
65
|
-
elsif ff_browser?
|
66
|
-
::Selenium::WebDriver::Remote::Capabilities.firefox
|
67
|
-
elsif chrome_browser?
|
68
|
-
::Selenium::WebDriver::Remote::Capabilities.chrome
|
69
|
-
elsif opera_browser?
|
70
|
-
::Selenium::WebDriver::Remote::Capabilities.opera
|
71
|
-
elsif safari_browser?
|
72
|
-
::Selenium::WebDriver::Remote::Capabilities.safari
|
73
|
-
else
|
74
|
-
log.error "Unknown '#{settings.sel_browser}' sel_browser. Check your settings, it should be one of [:ie, :iexplore, :ff, :firefox, :chrome, :opera, safari]"
|
75
|
-
end
|
76
|
-
|
77
|
-
Capybara::Selenium::Driver.new(app, :browser => :remote, :url => settings.sel_hub_url, :desired_capabilities => caps)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def define_selenium_driver
|
82
|
-
Capybara.register_driver :selenium do |app|
|
83
|
-
params = {browser: settings.sel_browser.to_s.to_sym}
|
84
|
-
params[:profile] = base_ff_profile_settings if ff_browser?
|
85
|
-
Capybara::Selenium::Driver.new app, params
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def define_selenium_dev_driver
|
90
|
-
Capybara.register_driver :selenium_dev do |app|
|
91
|
-
profile = base_ff_profile_settings
|
92
|
-
vendor_dir = settings.custom_vendor_dir || File.join(File.dirname(__FILE__), '..', 'vendor')
|
93
|
-
log.error "Vendor directory was not found('#{vendor_dir}')." unless Dir.exist?(vendor_dir)
|
94
|
-
%w(firebug*.xpi firepath*.xpi).each do |file_name|
|
95
|
-
full_path_pattern = File.join(File.expand_path(vendor_dir), file_name)
|
96
|
-
if (full_path = Dir[full_path_pattern].first)
|
97
|
-
profile.add_extension full_path
|
98
|
-
else
|
99
|
-
log.error "Extension was not found by '#{full_path_pattern}' pattern!"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
profile['extensions.firebug.currentVersion'] = 'Last' # avoid 'first run' tab
|
103
|
-
profile['extensions.firebug.previousPlacement'] = 1
|
104
|
-
profile['extensions.firebug.onByDefault'] = true
|
105
|
-
profile['extensions.firebug.defaultPanelName'] = 'firepath'
|
106
|
-
profile['extensions.firebug.script.enableSites'] = true
|
107
|
-
profile['extensions.firebug.net.enableSites'] = true
|
108
|
-
profile['extensions.firebug.console.enableSites'] = true
|
109
|
-
|
110
|
-
Capybara::Selenium::Driver.new app, browser: :firefox, profile: profile
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def define_webkit_driver
|
115
|
-
require 'capybara-webkit'
|
116
|
-
end
|
117
|
-
|
118
|
-
def define_poltergeist_driver
|
119
|
-
require 'capybara/poltergeist'
|
120
|
-
Capybara.register_driver :poltergeist do |app|
|
121
|
-
Capybara::Poltergeist::Driver.new(
|
122
|
-
app, {
|
123
|
-
js_errors: !settings.pjs_ignore_js_errors,
|
124
|
-
phantomjs_options: ["--ignore-ssl-errors=#{settings.pjs_ignore_ssl_errors ? 'yes' : 'no'}" ]
|
125
|
-
}
|
126
|
-
)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def define_phantomjs_driver
|
131
|
-
Capybara.register_driver :phantomjs do |app|
|
132
|
-
Capybara::Selenium::Driver.new(
|
133
|
-
app, browser: :phantomjs,
|
134
|
-
desired_capabilities: {
|
135
|
-
javascript_enabled: !settings.pjs_ignore_js_errors
|
136
|
-
},
|
137
|
-
args: ["--ignore-ssl-errors=#{settings.pjs_ignore_ssl_errors ? 'yes' : 'no'}" ]
|
138
|
-
)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def define_sauce_driver
|
143
|
-
task_name = rake_task_name
|
144
|
-
caps_opts = {
|
145
|
-
platform: settings.sl_platform,
|
146
|
-
browser_name: settings.sl_browser_name,
|
147
|
-
name: "#{ENV['RAKE_TASK'] ? (task_name.empty? ? 'ALL' : task_name) : 'CUSTOM'} #{settings.sl_browser_name.upcase}",
|
148
|
-
'max-duration' => settings.sl_max_duration,
|
149
|
-
'idle-timeout' => settings.sl_idle_timeout,
|
150
|
-
'selenium-version' => settings.sl_selenium_version,
|
151
|
-
'record-screenshots' => settings.sl_record_screenshot,
|
152
|
-
'video-upload-on-pass' => settings.sl_video_upload_on_pass
|
153
|
-
}
|
154
|
-
|
155
|
-
unless (settings.sl_browser_version.to_s || '').empty?
|
156
|
-
caps_opts['version'] = settings.sl_browser_version.to_s
|
157
|
-
end
|
158
|
-
|
159
|
-
options = {
|
160
|
-
url: settings.sl_url,
|
161
|
-
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.new(caps_opts),
|
162
|
-
http_client: ::Selenium::WebDriver::Remote::Http::Default.new.tap{|c| c.timeout = settings.timeout_medium},
|
163
|
-
browser: :remote
|
164
|
-
}
|
165
|
-
|
166
|
-
Capybara.register_driver :sauce do |app|
|
167
|
-
driver = Capybara::Selenium::Driver.new(app, options)
|
168
|
-
driver.browser.file_detector = lambda do |args|
|
169
|
-
str = args.first.to_s
|
170
|
-
str if File.exist?(str)
|
171
|
-
end
|
172
|
-
driver
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def define_testingbot_driver
|
177
|
-
require 'testingbot'
|
178
|
-
task_name = rake_task_name
|
179
|
-
caps_opts = {
|
180
|
-
platform: settings.tb_platform,
|
181
|
-
browser_name: settings.tb_browser_name,
|
182
|
-
name: "#{ENV['RAKE_TASK'] ? (task_name.empty? ? 'ALL' : task_name) : 'CUSTOM'} #{settings.tb_browser_name.upcase}",
|
183
|
-
maxduration: settings.tb_max_duration.to_i,
|
184
|
-
idletimeout: settings.tb_idle_timeout.to_i,
|
185
|
-
'selenium-version' => settings.tb_selenium_version,
|
186
|
-
screenshot: settings.tb_record_screenshot,
|
187
|
-
'avoid-proxy' => settings.tb_avoid_proxy
|
188
|
-
}
|
189
|
-
|
190
|
-
unless (settings.tb_browser_version.to_s || "").empty?
|
191
|
-
caps_opts['version'] = settings.tb_browser_version.to_s
|
192
|
-
end
|
193
|
-
options = {
|
194
|
-
url: settings.tb_url,
|
195
|
-
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.new(caps_opts),
|
196
|
-
http_client: ::Selenium::WebDriver::Remote::Http::Default.new.tap{|c| c.timeout = settings.timeout_medium},
|
197
|
-
browser: :remote
|
198
|
-
}
|
199
|
-
Capybara.register_driver :testingbot do |app|
|
200
|
-
driver = Capybara::Selenium::Driver.new(app, options)
|
201
|
-
driver.browser.file_detector = lambda do |args|
|
202
|
-
str = args.first.to_s
|
203
|
-
str if File.exist?(str)
|
204
|
-
end
|
205
|
-
driver
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def define_browserstack_driver
|
211
|
-
task_name = rake_task_name
|
212
|
-
caps_opts = {
|
213
|
-
name: "#{ENV['RAKE_TASK'] ? (task_name.empty? ? 'ALL' : task_name) : 'CUSTOM'} #{settings.bs_mobile ? settings.bs_m_browser : settings.bs_browser_name.upcase}",
|
214
|
-
maxduration: settings.bs_max_duration.to_i,
|
215
|
-
idletimeout: settings.bs_idle_timeout.to_i,
|
216
|
-
project: settings.bs_project,
|
217
|
-
build: settings.bs_build,
|
218
|
-
resolution: settings.bs_resolution
|
219
|
-
}
|
220
|
-
|
221
|
-
if settings.bs_local
|
222
|
-
caps_opts['browserstack.local'] = settings.bs_local
|
223
|
-
caps_opts['browserstack.localIdentifier'] = settings.bs_local_ID
|
224
|
-
end
|
225
|
-
|
226
|
-
if settings.bs_mobile
|
227
|
-
caps_opts[:browserName] = settings.bs_m_browser
|
228
|
-
caps_opts[:platform] = settings.bs_m_platform
|
229
|
-
caps_opts[:device] = settings.bs_m_device
|
230
|
-
else
|
231
|
-
caps_opts[:os] = settings.bs_os_name
|
232
|
-
caps_opts[:os_version] = settings.bs_os_version
|
233
|
-
caps_opts[:browser] = settings.bs_browser_name
|
234
|
-
caps_opts[:browser_version] = settings.bs_browser_version
|
235
|
-
end
|
236
|
-
|
237
|
-
options = {
|
238
|
-
url: settings.bs_url,
|
239
|
-
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.new(caps_opts),
|
240
|
-
browser: :remote
|
241
|
-
}
|
242
|
-
Capybara.register_driver :browserstack do |app|
|
243
|
-
driver = Capybara::Selenium::Driver.new(app, options)
|
244
|
-
driver.browser.file_detector = lambda do |args|
|
245
|
-
str = args.first.to_s
|
246
|
-
str if File.exist?(str)
|
247
|
-
end
|
248
|
-
|
249
|
-
driver
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
##
|
254
|
-
#
|
255
|
-
# Returns url of current Sauce Labs job
|
256
|
-
#
|
257
|
-
# *Parameters:*
|
258
|
-
# * +name+ - Your account name
|
259
|
-
#
|
260
|
-
# *Returns:*
|
261
|
-
# * +string+ - URL address of last running Sauce Labs job
|
262
|
-
#
|
263
|
-
|
264
|
-
def sauce_resource_path(name)
|
265
|
-
host = "https://#{settings.sl_user}:#{settings.sl_api_key}@saucelabs.com"
|
266
|
-
path = "/rest/#{settings.sl_user}/jobs/#{session_id}/results/#{name}"
|
267
|
-
"#{host}#{path}"
|
268
|
-
end
|
269
|
-
|
270
|
-
##
|
271
|
-
#
|
272
|
-
# Sends http request to change current Sauce Labs job status - pass/fail
|
273
|
-
#
|
274
|
-
# *Parameters:*
|
275
|
-
# * +json_data+ - test status as hash (for details see Saucelab documentation)
|
276
|
-
#
|
277
|
-
|
278
|
-
|
279
|
-
def update_sauce_job_status(json_data = {})
|
280
|
-
host = "http://#{settings.sl_user}:#{settings.sl_api_key}@saucelabs.com"
|
281
|
-
path = "/rest/v1/#{settings.sl_user}/jobs/#{session_id}"
|
282
|
-
url = "#{host}#{path}"
|
283
|
-
::RestClient.put url, json_data.to_json, content_type: :json, accept: :json
|
284
|
-
end
|
285
|
-
|
286
|
-
##
|
287
|
-
#
|
288
|
-
# Returns custom name for Sauce Labs job
|
289
|
-
#
|
290
|
-
# *Returns:*
|
291
|
-
# * +string+ - Return name of current Sauce Labs job
|
292
|
-
#
|
293
|
-
|
294
|
-
def suite_name
|
295
|
-
res = if ENV['RAKE_TASK']
|
296
|
-
res = ENV['RAKE_TASK'].sub(/(?:r?spec|cucumber):?(.*)/, '\1').upcase
|
297
|
-
res.empty? ? 'ALL' : res
|
298
|
-
else
|
299
|
-
'CUSTOM'
|
300
|
-
end
|
301
|
-
"#{res} #{settings.sl_browser_name.upcase}"
|
302
|
-
end
|
303
|
-
|
304
|
-
##
|
305
|
-
#
|
306
|
-
# Returns current session id
|
307
|
-
#
|
308
|
-
|
309
|
-
def session_id
|
310
|
-
Capybara.current_session.driver.browser.instance_variable_get(:@bridge).session_id
|
311
|
-
end
|
312
|
-
|
313
|
-
##
|
314
|
-
#
|
315
|
-
# Returns custom name for rake task
|
316
|
-
#
|
317
|
-
# *Returns:*
|
318
|
-
# * +string+ - Returns rake task name
|
319
|
-
#
|
320
|
-
|
321
|
-
def rake_task_name
|
322
|
-
ENV['RAKE_TASK'].to_s.sub(/(?:r?spec|cucumber):?(.*)/, '\1').upcase
|
323
|
-
end
|
324
|
-
|
325
|
-
Capybara.run_server = false
|
326
|
-
Capybara.app_host = ''
|
327
|
-
Capybara.asset_host = app_base_url
|
328
|
-
Capybara.default_max_wait_time = settings.timeout_small
|
329
|
-
Capybara.ignore_hidden_elements = true
|
330
|
-
Capybara.visible_text_only = true
|
331
|
-
Capybara.match = :one
|
332
|
-
Capybara.exact_options = true
|
333
|
-
Capybara.default_driver = settings.driver.to_s.to_sym
|
334
|
-
Capybara.javascript_driver = settings.driver.to_s.to_sym
|
335
|
-
|
336
|
-
define_driver
|
337
|
-
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
|
-
# @deprecated
|
342
|
-
#
|
343
|
-
CapybaraSettings = Capybara::Settings
|