howitzer 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +1 -2
- data/generators/base_generator.rb +4 -6
- data/generators/config/config_generator.rb +1 -0
- data/generators/config/templates/capybara.rb +3 -3
- data/generators/config/templates/default.yml +7 -1
- data/generators/config/templates/drivers/browserstack.rb +30 -3
- data/generators/config/templates/drivers/crossbrowsertesting.rb +9 -11
- data/generators/config/templates/drivers/lambdatest.rb +30 -0
- data/generators/config/templates/drivers/sauce.rb +29 -1
- data/generators/config/templates/drivers/selenium_grid.rb +3 -3
- data/generators/config/templates/drivers/testingbot.rb +28 -1
- data/generators/cucumber/templates/hooks.rb +2 -2
- data/generators/root/templates/Gemfile.erb +0 -4
- data/generators/rspec/templates/spec_helper.rb +2 -2
- data/generators/turnip/templates/spec_helper.rb +2 -2
- data/lib/howitzer/capybara_helpers.rb +20 -3
- data/lib/howitzer/email.rb +2 -2
- data/lib/howitzer/mail_adapters/mailgun.rb +1 -1
- data/lib/howitzer/version.rb +1 -1
- metadata +9 -14
- data/generators/config/templates/drivers/appium.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe051b3bfe068d7fe68f999882f1aac432ee24dd558438e3e0b6f195c7123885
|
4
|
+
data.tar.gz: '09dca8df71b0ed83c4f0cf6f49679330628d92934f4e2e36bd861ddeb3ff2427'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5265ec269dba8e334e2c1223ac788c2a65b331f2374d9007ae78a3c0b5fc1aa79a9ce65ccfff713efeec3a7e6531cf42fc413eeb722c908f916b7fd5efc8f34d
|
7
|
+
data.tar.gz: 72948920c6c1cd9b437e766dc89bc205b12837c86e98a225ff05d853d17f16a4b833cbcc9febeeafd4b5ed3f60be915c0a67e779dd5d9967175c6b9e62cfc9f5
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,20 @@
|
|
4
4
|
|
5
5
|
### Bug-fixes
|
6
6
|
|
7
|
+
## [2.4.0](https://github.com/strongqa/howitzer/compare/v2.3.0...v2.4.0) (2022-07-22)
|
8
|
+
|
9
|
+
|
10
|
+
### Features
|
11
|
+
|
12
|
+
* LambdaTest support ([#305](https://github.com/strongqa/howitzer/issues/305)) ([eca5b8a](https://github.com/strongqa/howitzer/commit/eca5b8a6e4e30c4b9a7640ee999c061cd8e71e09))
|
13
|
+
* RegExp email subject matcher for Mailgun ([#304](https://github.com/strongqa/howitzer/issues/304)) ([598c9a2](https://github.com/strongqa/howitzer/commit/598c9a27b5dd8047c212ad050f86b78fa72d326d))
|
14
|
+
* Selenium 4 support ([#303](https://github.com/strongqa/howitzer/issues/303)) ([c5bf2d8](https://github.com/strongqa/howitzer/commit/c5bf2d8426e36f97b9fa109a783803c7b1bb538d))
|
15
|
+
|
16
|
+
|
17
|
+
### Continuous Integration
|
18
|
+
|
19
|
+
* release-please integration ([#307](https://github.com/strongqa/howitzer/issues/307)) ([bd2f53e](https://github.com/strongqa/howitzer/commit/bd2f53e75c9ef283daadf8f9063d827c4f885a77))
|
20
|
+
|
7
21
|
## [v2.3.0](https://github.com/strongqa/howitzer/compare/v2.2.0...v2.3.0)
|
8
22
|
|
9
23
|
### New Features
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
- Fast installation and configuration of the complete testing infrastructure (takes less than 5 minutes).
|
27
27
|
- Elegant, intuitive and powerful Ruby language underneath.
|
28
28
|
- Possibility to choose your favorite BDD tool (Cucumber, RSpec or Turnip).
|
29
|
-
- Integration with SauceLabs, Testingbot, BrowserStack, CrossBrowserTesting cloud services.
|
29
|
+
- Integration with SauceLabs, Testingbot, BrowserStack, CrossBrowserTesting, LambdaTest cloud services.
|
30
30
|
- Integration with MailGun, Gmail, Mailtrap email services.
|
31
31
|
- Easy tests support based on the best patterns, techniques, principles.
|
32
32
|
- Ability to execute tests against to both browserless driver and actual browsers with no changes in your tests.
|
@@ -50,7 +50,6 @@ You can also find the Rdoc documentation on [Rubygems](https://rubygems.org/gems
|
|
50
50
|
* [SafariDriver](https://webkit.org/blog/6900/webdriver-support-in-safari-10/) (For **safari** selenium browser)
|
51
51
|
* [Chrome](https://www.google.com/chrome/browser/desktop/index.html) v.59+ (For **headless chrome** support)
|
52
52
|
* [Firefox](https://www.mozilla.org/en-US/firefox/new/) v.56+ (For **headless firefox** support)
|
53
|
-
* [Android SDK](https://developer.android.com/studio) and [Appium](https://appium.io/docs/en/about-appium/getting-started) (For Appium driver)
|
54
53
|
## Setup
|
55
54
|
To install, type
|
56
55
|
|
@@ -89,8 +89,8 @@ module Howitzer
|
|
89
89
|
copy_templates_file_exist(data, destination_path, source_path)
|
90
90
|
else
|
91
91
|
write_template(destination_path, source_path)
|
92
|
-
puts_info "#{ColorizedString.new('Added').light_green} template '#{data[:source]}' with"\
|
93
|
-
"
|
92
|
+
puts_info "#{ColorizedString.new('Added').light_green} template '#{data[:source]}' with " \
|
93
|
+
"params '#{@options}' to destination '#{data[:destination]}'"
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
@@ -118,10 +118,8 @@ module Howitzer
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def write_template(dest_path, source_path)
|
121
|
-
File.
|
122
|
-
|
123
|
-
.result(OpenStruct.new(@options).instance_eval { binding }))
|
124
|
-
end
|
121
|
+
File.write(dest_path, ERB.new(File.read(source_path), trim_mode: '-')
|
122
|
+
.result(OpenStruct.new(@options).instance_eval { binding })) # rubocop:disable Style/OpenStructUse
|
125
123
|
end
|
126
124
|
|
127
125
|
private
|
@@ -13,6 +13,7 @@ module Howitzer
|
|
13
13
|
{ source: 'drivers/crossbrowsertesting.rb', destination: 'config/drivers/crossbrowsertesting.rb' },
|
14
14
|
{ source: 'drivers/headless_chrome.rb', destination: 'config/drivers/headless_chrome.rb' },
|
15
15
|
{ source: 'drivers/headless_firefox.rb', destination: 'config/drivers/headless_firefox.rb' },
|
16
|
+
{ source: 'drivers/lambdatest.rb', destination: 'config/drivers/lambdatest.rb' },
|
16
17
|
{ source: 'drivers/sauce.rb', destination: 'config/drivers/sauce.rb' },
|
17
18
|
{ source: 'drivers/selenium.rb', destination: 'config/drivers/selenium.rb' },
|
18
19
|
{ source: 'drivers/selenium_grid.rb', destination: 'config/drivers/selenium_grid.rb' },
|
@@ -1,18 +1,18 @@
|
|
1
1
|
HOWITZER_KNOWN_DRIVERS = %i[
|
2
|
-
appium
|
3
2
|
selenium
|
4
3
|
selenium_grid
|
5
4
|
sauce
|
6
5
|
testingbot
|
7
6
|
browserstack
|
8
7
|
crossbrowsertesting
|
8
|
+
lambdatest
|
9
9
|
headless_chrome
|
10
10
|
headless_firefox
|
11
11
|
].freeze
|
12
12
|
|
13
13
|
unless HOWITZER_KNOWN_DRIVERS.include?(Howitzer.driver.to_s.to_sym)
|
14
|
-
raise Howitzer::UnknownDriverError, "Unknown '#{Howitzer.driver}' driver." \
|
15
|
-
"
|
14
|
+
raise Howitzer::UnknownDriverError, "Unknown '#{Howitzer.driver}' driver. " \
|
15
|
+
"Check your settings, it should be one of #{HOWITZER_KNOWN_DRIVERS}"
|
16
16
|
end
|
17
17
|
|
18
18
|
Capybara.configure do |config|
|
@@ -27,7 +27,8 @@
|
|
27
27
|
test_order: defined
|
28
28
|
|
29
29
|
# Specify one of the following drivers: selenium, selenium_grid, sauce,
|
30
|
-
# testingbot, browserstack, crossbrowsertesting,
|
30
|
+
# testingbot, browserstack, crossbrowsertesting, lambdatest, headless_chrome,
|
31
|
+
# headless_firefox
|
31
32
|
driver: headless_chrome
|
32
33
|
|
33
34
|
# -Selenium-
|
@@ -81,6 +82,11 @@
|
|
81
82
|
cloud_cbt_record_video: 'true'
|
82
83
|
cloud_cbt_record_network: 'true'
|
83
84
|
|
85
|
+
# -LambdaTest (https://www.lambdatest.com/support/docs/selenium-automation-capabilities)
|
86
|
+
cloud_lambdatest_resolution: '1024x768'
|
87
|
+
cloud_lambdatest_project: 'Howitzer Example'
|
88
|
+
cloud_lambdatest_build: 'v1'
|
89
|
+
|
84
90
|
###########################################################
|
85
91
|
# CAPYBARA SETTINGS #
|
86
92
|
###########################################################
|
@@ -1,10 +1,32 @@
|
|
1
|
-
|
1
|
+
def w3c_selenium_browserstack_caps # rubocop:disable Metrics/AbcSize
|
2
|
+
caps = CapybaraHelpers.required_w3c_cloud_caps
|
3
|
+
bstack_options = {
|
4
|
+
sessionName: "#{(Howitzer.current_rake_task || 'ALL').upcase} #{Howitzer.cloud_browser_name}",
|
5
|
+
projectName: Howitzer.cloud_bstack_project,
|
6
|
+
buildName: Howitzer.cloud_bstack_build
|
7
|
+
}
|
8
|
+
bstack_options['resolution'] = Howitzer.cloud_bstack_resolution if Howitzer.cloud_bstack_resolution.present?
|
9
|
+
bstack_options['os'] = Howitzer.cloud_bstack_os if Howitzer.cloud_bstack_os.present?
|
10
|
+
caps['bstack:options'] = bstack_options
|
11
|
+
if Howitzer.user_agent.present?
|
12
|
+
if CapybaraHelpers.chrome_browser?
|
13
|
+
caps['goog:chromeOptions'] = { 'args' => ["--user-agent=#{Howitzer.user_agent}"] }
|
14
|
+
elsif CapybaraHelpers.ff_browser?
|
15
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
16
|
+
profile['general.useragent.override'] = Howitzer.user_agent
|
17
|
+
caps['moz:firefoxOptions'] = { profile: profile.as_json['zip'] }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
caps
|
21
|
+
end
|
22
|
+
|
23
|
+
def classic_selenium_browserstack_caps # rubocop:disable Metrics/AbcSize
|
2
24
|
caps = CapybaraHelpers.required_cloud_caps.merge(
|
3
25
|
project: Howitzer.cloud_bstack_project,
|
4
26
|
build: Howitzer.cloud_bstack_build
|
5
27
|
)
|
6
|
-
caps[
|
7
|
-
caps[
|
28
|
+
caps['resolution'] = Howitzer.cloud_bstack_resolution if Howitzer.cloud_bstack_resolution.present?
|
29
|
+
caps['os'] = Howitzer.cloud_bstack_os if Howitzer.cloud_bstack_os.present?
|
8
30
|
if Howitzer.user_agent.present?
|
9
31
|
if CapybaraHelpers.chrome_browser?
|
10
32
|
caps['chromeOptions'] = { 'args' => ["--user-agent=#{Howitzer.user_agent}"] }
|
@@ -14,7 +36,12 @@ Capybara.register_driver :browserstack do |app|
|
|
14
36
|
caps[:firefox_profile] = profile
|
15
37
|
end
|
16
38
|
end
|
39
|
+
caps
|
40
|
+
end
|
41
|
+
|
42
|
+
Capybara.register_driver :browserstack do |app|
|
17
43
|
url = "https://#{Howitzer.cloud_auth_login}:#{Howitzer.cloud_auth_pass}@hub.browserstack.com/wd/hub"
|
44
|
+
caps = CapybaraHelpers.w3c_selenium? ? w3c_selenium_browserstack_caps : classic_selenium_browserstack_caps
|
18
45
|
CapybaraHelpers.cloud_driver(app, caps, url)
|
19
46
|
end
|
20
47
|
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# :crossbrowsertesting driver
|
2
2
|
|
3
3
|
Capybara.register_driver :crossbrowsertesting do |app|
|
4
|
-
|
5
|
-
|
6
|
-
caps
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
4
|
+
url = "https://#{CGI.escape(Howitzer.cloud_auth_login)}:#{Howitzer.cloud_auth_pass}" \
|
5
|
+
'@hub.crossbrowsertesting.com/wd/hub'
|
6
|
+
caps = CapybaraHelpers.required_cloud_caps.merge(
|
7
|
+
build: Howitzer.cloud_cbt_build,
|
8
|
+
screenResolution: Howitzer.cloud_cbt_screen_resolution,
|
9
|
+
record_video: Howitzer.cloud_cbt_record_video,
|
10
|
+
record_network: Howitzer.cloud_cbt_record_network,
|
11
|
+
max_duration: Howitzer.cloud_max_duration
|
12
|
+
)
|
13
13
|
if Howitzer.user_agent.present?
|
14
14
|
if CapybaraHelpers.chrome_browser?
|
15
15
|
caps['chromeOptions'] = { 'args' => ["--user-agent=#{Howitzer.user_agent}"] }
|
@@ -19,8 +19,6 @@ Capybara.register_driver :crossbrowsertesting do |app|
|
|
19
19
|
caps[:firefox_profile] = profile
|
20
20
|
end
|
21
21
|
end
|
22
|
-
url = "https://#{CGI.escape(Howitzer.cloud_auth_login)}:#{Howitzer.cloud_auth_pass}"\
|
23
|
-
'@hub.crossbrowsertesting.com/wd/hub'
|
24
22
|
CapybaraHelpers.cloud_driver(app, caps, url)
|
25
23
|
end
|
26
24
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
def w3c_selenium_lambdatest_caps
|
2
|
+
caps = CapybaraHelpers.required_w3c_cloud_caps
|
3
|
+
lt_options = {
|
4
|
+
name: "#{(Howitzer.current_rake_task || 'ALL').upcase} #{Howitzer.cloud_browser_name}",
|
5
|
+
build: Howitzer.cloud_lambdatest_build
|
6
|
+
}
|
7
|
+
lt_options[:platformName] = Howitzer.cloud_platform unless Howitzer.cloud_platform.casecmp?('any')
|
8
|
+
lt_options[:resolution] = Howitzer.cloud_lambdatest_resolution if Howitzer.cloud_lambdatest_resolution.present?
|
9
|
+
caps['LT:Options'] = lt_options
|
10
|
+
caps
|
11
|
+
end
|
12
|
+
|
13
|
+
def classic_selenium_lambdatest_caps
|
14
|
+
caps = CapybaraHelpers.required_cloud_caps.merge(
|
15
|
+
build: Howitzer.cloud_lambdatest_build,
|
16
|
+
acceptSslCerts: true
|
17
|
+
)
|
18
|
+
caps[:resolution] = Howitzer.cloud_lambdatest_resolution if Howitzer.cloud_lambdatest_resolution.present?
|
19
|
+
caps
|
20
|
+
end
|
21
|
+
|
22
|
+
Capybara.register_driver :lambdatest do |app|
|
23
|
+
url = "https://#{Howitzer.cloud_auth_login}:#{Howitzer.cloud_auth_pass}@hub.lambdatest.com/wd/hub"
|
24
|
+
caps = CapybaraHelpers.w3c_selenium? ? w3c_selenium_lambdatest_caps : classic_selenium_lambdatest_caps
|
25
|
+
CapybaraHelpers.cloud_driver(app, caps, url)
|
26
|
+
end
|
27
|
+
|
28
|
+
Capybara::Screenshot.class_eval do
|
29
|
+
register_driver :lambdatest, ®istered_drivers[:selenium]
|
30
|
+
end
|
@@ -1,6 +1,29 @@
|
|
1
1
|
# :sauce driver
|
2
2
|
|
3
|
-
|
3
|
+
def w3c_selenium_browserstack_caps # rubocop:disable Metrics/AbcSize
|
4
|
+
caps = CapybaraHelpers.required_w3c_cloud_caps
|
5
|
+
caps['platform'] = Howitzer.cloud_platform unless Howitzer.cloud_platform.casecmp?('any')
|
6
|
+
sauce_options = {
|
7
|
+
name: "#{(Howitzer.current_rake_task || 'ALL').upcase} #{Howitzer.cloud_browser_name}",
|
8
|
+
maxDuration: Howitzer.cloud_max_duration,
|
9
|
+
idleTimeout: Howitzer.cloud_sauce_idle_timeout,
|
10
|
+
recordScreenshots: Howitzer.cloud_sauce_record_screenshots,
|
11
|
+
videoUploadOnPass: Howitzer.cloud_sauce_video_upload_on_pass
|
12
|
+
}
|
13
|
+
caps['sauce:options'] = sauce_options
|
14
|
+
if Howitzer.user_agent.present?
|
15
|
+
if CapybaraHelpers.chrome_browser?
|
16
|
+
caps['goog:chromeOptions'] = { 'args' => ["--user-agent=#{Howitzer.user_agent}"] }
|
17
|
+
elsif CapybaraHelpers.ff_browser?
|
18
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
19
|
+
profile['general.useragent.override'] = Howitzer.user_agent
|
20
|
+
caps['moz:firefoxOptions'] = { profile: profile.as_json['zip'] }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
caps
|
24
|
+
end
|
25
|
+
|
26
|
+
def classic_selenium_browserstack_caps # rubocop:disable Metrics/AbcSize
|
4
27
|
caps = CapybaraHelpers.required_cloud_caps.merge(
|
5
28
|
maxDuration: Howitzer.cloud_max_duration,
|
6
29
|
idleTimeout: Howitzer.cloud_sauce_idle_timeout,
|
@@ -16,7 +39,12 @@ Capybara.register_driver :sauce do |app|
|
|
16
39
|
caps[:firefox_profile] = profile
|
17
40
|
end
|
18
41
|
end
|
42
|
+
caps
|
43
|
+
end
|
44
|
+
|
45
|
+
Capybara.register_driver :sauce do |app|
|
19
46
|
url = "https://#{Howitzer.cloud_auth_login}:#{Howitzer.cloud_auth_pass}@ondemand.saucelabs.com/wd/hub"
|
47
|
+
caps = CapybaraHelpers.w3c_selenium? ? w3c_selenium_browserstack_caps : classic_selenium_browserstack_caps
|
20
48
|
CapybaraHelpers.cloud_driver(app, caps, url)
|
21
49
|
end
|
22
50
|
|
@@ -10,9 +10,9 @@ Capybara.register_driver :selenium_grid do |app|
|
|
10
10
|
elsif CapybaraHelpers.safari_browser?
|
11
11
|
Selenium::WebDriver::Remote::Capabilities.safari
|
12
12
|
else
|
13
|
-
raise Howitzer::UnknownBrowserError, "Unknown '#{Howitzer.selenium_browser}' selenium_browser." \
|
14
|
-
'
|
15
|
-
'
|
13
|
+
raise Howitzer::UnknownBrowserError, "Unknown '#{Howitzer.selenium_browser}' selenium_browser. " \
|
14
|
+
'Check your settings, it should be one of ' \
|
15
|
+
'[:ie, :iexplore, :ff, :firefox, :chrome, :safari]'
|
16
16
|
end
|
17
17
|
if Howitzer.user_agent.present?
|
18
18
|
if CapybaraHelpers.chrome_browser?
|
@@ -1,6 +1,28 @@
|
|
1
1
|
# :testingbot driver
|
2
2
|
|
3
|
-
|
3
|
+
def w3c_selenium_browserstack_caps # rubocop:disable Metrics/AbcSize
|
4
|
+
caps = CapybaraHelpers.required_w3c_cloud_caps
|
5
|
+
caps[:platformName] = Howitzer.cloud_platform unless Howitzer.cloud_platform.casecmp?('any')
|
6
|
+
tb_options = {
|
7
|
+
name: "#{(Howitzer.current_rake_task || 'ALL').upcase} #{Howitzer.cloud_browser_name}",
|
8
|
+
maxduration: Howitzer.cloud_max_duration,
|
9
|
+
idletimeout: Howitzer.cloud_testingbot_idle_timeout,
|
10
|
+
screenshot: Howitzer.cloud_testingbot_screenshots
|
11
|
+
}
|
12
|
+
caps['tb:options'] = tb_options
|
13
|
+
if Howitzer.user_agent.present?
|
14
|
+
if CapybaraHelpers.chrome_browser?
|
15
|
+
caps['goog:chromeOptions'] = { 'args' => ["--user-agent=#{Howitzer.user_agent}"] }
|
16
|
+
elsif CapybaraHelpers.ff_browser?
|
17
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
18
|
+
profile['general.useragent.override'] = Howitzer.user_agent
|
19
|
+
caps['moz:firefoxOptions'] = { profile: profile.as_json['zip'] }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
caps
|
23
|
+
end
|
24
|
+
|
25
|
+
def classic_selenium_browserstack_caps
|
4
26
|
caps = CapybaraHelpers.required_cloud_caps.merge(
|
5
27
|
maxduration: Howitzer.cloud_max_duration,
|
6
28
|
idletimeout: Howitzer.cloud_testingbot_idle_timeout,
|
@@ -15,7 +37,12 @@ Capybara.register_driver :testingbot do |app|
|
|
15
37
|
caps[:firefox_profile] = profile
|
16
38
|
end
|
17
39
|
end
|
40
|
+
caps
|
41
|
+
end
|
42
|
+
|
43
|
+
Capybara.register_driver :testingbot do |app|
|
18
44
|
url = "https://#{Howitzer.cloud_auth_login}:#{Howitzer.cloud_auth_pass}@hub.testingbot.com/wd/hub"
|
45
|
+
caps = CapybaraHelpers.w3c_selenium? ? w3c_selenium_browserstack_caps : classic_selenium_browserstack_caps
|
19
46
|
CapybaraHelpers.cloud_driver(app, caps, url)
|
20
47
|
end
|
21
48
|
|
@@ -15,8 +15,8 @@ After do |scenario|
|
|
15
15
|
if CapybaraHelpers.cloud_driver?
|
16
16
|
Howitzer::Cache.store(:cloud, :status, false) if scenario.failed?
|
17
17
|
session_end = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
|
18
|
-
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end}" \
|
19
|
-
"
|
18
|
+
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end} " \
|
19
|
+
"URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
|
20
20
|
elsif CapybaraHelpers.ie_browser?
|
21
21
|
Howitzer::Log.info 'IE reset session'
|
22
22
|
Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
|
@@ -16,7 +16,3 @@ gem 'rubocop'
|
|
16
16
|
<%= "gem 'rubocop-rspec'\n" if rspec || turnip -%>
|
17
17
|
<%= "gem 'turnip'\n" if turnip -%>
|
18
18
|
<%= "gem 'syntax'\n" if cucumber -%>
|
19
|
-
|
20
|
-
# Uncomment it if you are going to use 'appium' driver. Appium and Android SDK should be installed.
|
21
|
-
# See https://appium.io/docs/en/about-appium/getting-started/
|
22
|
-
# gem 'appium_capybara'
|
@@ -32,8 +32,8 @@ RSpec.configure do |config|
|
|
32
32
|
Howitzer::Cache.clear_all_ns
|
33
33
|
if CapybaraHelpers.cloud_driver?
|
34
34
|
session_end = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
|
35
|
-
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end}" \
|
36
|
-
"
|
35
|
+
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end} " \
|
36
|
+
"URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
|
37
37
|
elsif CapybaraHelpers.ie_browser?
|
38
38
|
Howitzer::Log.info 'IE reset session'
|
39
39
|
Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
|
@@ -31,8 +31,8 @@ RSpec.configure do |config|
|
|
31
31
|
Howitzer::Cache.clear_all_ns
|
32
32
|
if CapybaraHelpers.cloud_driver?
|
33
33
|
session_end = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
|
34
|
-
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end}" \
|
35
|
-
"
|
34
|
+
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end} " \
|
35
|
+
"URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
|
36
36
|
elsif CapybaraHelpers.ie_browser?
|
37
37
|
Howitzer::Log.info 'IE reset session'
|
38
38
|
Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
|
@@ -4,7 +4,8 @@ require 'howitzer/exceptions'
|
|
4
4
|
# There is an issue with supporting Ruby 3 by Selenium Webdriver 3.x version
|
5
5
|
# https://github.com/SeleniumHQ/selenium/issues/9001
|
6
6
|
# Migration to Selenium Webdriver 4 is planned when it will be released without alfa, beta stages.
|
7
|
-
|
7
|
+
# :nocov:
|
8
|
+
if Gem::Requirement.new('>=3').satisfied_by?(Gem::Version.new(RUBY_VERSION)) &&
|
8
9
|
Gem::Requirement.new(['>=3', '<4']).satisfied_by?(Gem::Version.new(Selenium::WebDriver::VERSION))
|
9
10
|
module Selenium
|
10
11
|
module WebDriver
|
@@ -22,6 +23,7 @@ if Gem::Requirement.new('>=3').satisfied_by?(Gem::Version.new(RUBY_VERSION)) ||
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
26
|
+
# :nocov:
|
25
27
|
|
26
28
|
module Howitzer
|
27
29
|
# This module holds capybara helpers methods
|
@@ -130,6 +132,21 @@ module Howitzer
|
|
130
132
|
}
|
131
133
|
end
|
132
134
|
|
135
|
+
# @return [Hash] selenium W3C capabilities required for a cloud driver
|
136
|
+
|
137
|
+
def required_w3c_cloud_caps
|
138
|
+
{
|
139
|
+
browserName: Howitzer.cloud_browser_name,
|
140
|
+
browserVersion: Howitzer.cloud_browser_version
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
144
|
+
# @return [Boolean] whether or not Selenium is W3C compatible.
|
145
|
+
|
146
|
+
def w3c_selenium?
|
147
|
+
Gem::Requirement.new('>=4').satisfied_by?(Gem::Version.new(Selenium::WebDriver::VERSION))
|
148
|
+
end
|
149
|
+
|
133
150
|
# Buids selenium driver for a cloud service
|
134
151
|
# @param app [<Rack>] a rack application that this server will contain
|
135
152
|
# @param caps [Hash] remote capabilities
|
@@ -140,13 +157,13 @@ module Howitzer
|
|
140
157
|
http_client = ::Selenium::WebDriver::Remote::Http::Default.new
|
141
158
|
http_client.read_timeout = Howitzer.cloud_http_idle_timeout
|
142
159
|
http_client.open_timeout = Howitzer.cloud_http_idle_timeout
|
143
|
-
|
144
160
|
options = {
|
145
161
|
url: url,
|
146
|
-
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.new(caps),
|
147
162
|
http_client: http_client,
|
148
163
|
browser: :remote
|
149
164
|
}
|
165
|
+
options[w3c_selenium? ? :capabilities : :desired_capabilities] =
|
166
|
+
::Selenium::WebDriver::Remote::Capabilities.new(caps)
|
150
167
|
driver = Capybara::Selenium::Driver.new(app, **options)
|
151
168
|
driver.browser.file_detector = remote_file_detector
|
152
169
|
driver
|
data/lib/howitzer/email.rb
CHANGED
@@ -79,8 +79,8 @@ module Howitzer
|
|
79
79
|
def self.find_by_recipient(recipient, params = {})
|
80
80
|
if defined?(subject_value).nil? || subject_value.nil?
|
81
81
|
raise Howitzer::NoEmailSubjectError, "Please specify email subject. For example:\n" \
|
82
|
-
"class SomeEmail < Howitzer::Email\n" \
|
83
|
-
"
|
82
|
+
"class SomeEmail < Howitzer::Email\n " \
|
83
|
+
"subject ‘some subject text’\nend"
|
84
84
|
end
|
85
85
|
new(adapter.find(recipient, expand_subject(params), wait: wait_time_value))
|
86
86
|
end
|
@@ -89,7 +89,7 @@ module Howitzer
|
|
89
89
|
|
90
90
|
def self.event_by(recipient, subject)
|
91
91
|
events.to_h['items'].find do |hash|
|
92
|
-
hash['message']['recipients'].first == recipient && hash['message']['headers']['subject']
|
92
|
+
hash['message']['recipients'].first == recipient && subject === hash['message']['headers']['subject']
|
93
93
|
end
|
94
94
|
end
|
95
95
|
private_class_method :event_by
|
data/lib/howitzer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: howitzer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Parashchenko
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -149,9 +149,6 @@ dependencies:
|
|
149
149
|
- - ">="
|
150
150
|
- !ruby/object:Gem::Version
|
151
151
|
version: 3.4.1
|
152
|
-
- - "<"
|
153
|
-
- !ruby/object:Gem::Version
|
154
|
-
version: '4.0'
|
155
152
|
type: :runtime
|
156
153
|
prerelease: false
|
157
154
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -159,9 +156,6 @@ dependencies:
|
|
159
156
|
- - ">="
|
160
157
|
- !ruby/object:Gem::Version
|
161
158
|
version: 3.4.1
|
162
|
-
- - "<"
|
163
|
-
- !ruby/object:Gem::Version
|
164
|
-
version: '4.0'
|
165
159
|
- !ruby/object:Gem::Dependency
|
166
160
|
name: sexy_settings
|
167
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,11 +247,11 @@ files:
|
|
253
247
|
- generators/config/templates/capybara.rb
|
254
248
|
- generators/config/templates/custom.yml
|
255
249
|
- generators/config/templates/default.yml
|
256
|
-
- generators/config/templates/drivers/appium.rb
|
257
250
|
- generators/config/templates/drivers/browserstack.rb
|
258
251
|
- generators/config/templates/drivers/crossbrowsertesting.rb
|
259
252
|
- generators/config/templates/drivers/headless_chrome.rb
|
260
253
|
- generators/config/templates/drivers/headless_firefox.rb
|
254
|
+
- generators/config/templates/drivers/lambdatest.rb
|
261
255
|
- generators/config/templates/drivers/sauce.rb
|
262
256
|
- generators/config/templates/drivers/selenium.rb
|
263
257
|
- generators/config/templates/drivers/selenium_grid.rb
|
@@ -342,9 +336,10 @@ licenses:
|
|
342
336
|
metadata:
|
343
337
|
bug_tracker_uri: https://github.com/strongqa/howitzer/issues
|
344
338
|
changelog_uri: https://github.com/strongqa/howitzer/blob/master/CHANGELOG.md
|
345
|
-
documentation_uri: https://www.rubydoc.info/gems/howitzer/2.
|
339
|
+
documentation_uri: https://www.rubydoc.info/gems/howitzer/2.4.0
|
346
340
|
source_code_uri: https://github.com/strongqa/howitzer
|
347
|
-
|
341
|
+
rubygems_mfa_required: 'false'
|
342
|
+
post_install_message:
|
348
343
|
rdoc_options: []
|
349
344
|
require_paths:
|
350
345
|
- lib
|
@@ -359,8 +354,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
359
354
|
- !ruby/object:Gem::Version
|
360
355
|
version: '0'
|
361
356
|
requirements: []
|
362
|
-
rubygems_version: 3.2.
|
363
|
-
signing_key:
|
357
|
+
rubygems_version: 3.2.33
|
358
|
+
signing_key:
|
364
359
|
specification_version: 4
|
365
360
|
summary: Ruby based framework for acceptance testing
|
366
361
|
test_files: []
|
@@ -1,25 +0,0 @@
|
|
1
|
-
CapybaraHelpers.load_driver_gem!(:appium, 'appium_capybara', 'appium_capybara')
|
2
|
-
|
3
|
-
Capybara.register_driver(:appium) do |app|
|
4
|
-
caps = {}
|
5
|
-
caps['deviceName'] = Howitzer.appium_device_name
|
6
|
-
caps['deviceOrientation'] = Howitzer.appium_device_orientation
|
7
|
-
caps['platformVersion'] = Howitzer.appium_platform_version
|
8
|
-
caps['platformName'] = Howitzer.appium_platform_name
|
9
|
-
caps['browserName'] = Howitzer.appium_browser_name
|
10
|
-
|
11
|
-
url = Howitzer.appium_url
|
12
|
-
|
13
|
-
appium_lib_options = {
|
14
|
-
server_url: url
|
15
|
-
}
|
16
|
-
all_options = {
|
17
|
-
appium_lib: appium_lib_options,
|
18
|
-
caps: caps
|
19
|
-
}
|
20
|
-
Appium::Capybara::Driver.new app, all_options
|
21
|
-
end
|
22
|
-
|
23
|
-
Capybara::Screenshot.class_eval do
|
24
|
-
register_driver :appium, ®istered_drivers[:selenium]
|
25
|
-
end
|