howitzer 2.2.0 → 2.5.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 +43 -1
- data/LICENSE +1 -1
- data/README.md +16 -17
- data/generators/base_generator.rb +4 -6
- data/generators/config/config_generator.rb +2 -4
- data/generators/config/templates/boot.rb +1 -1
- data/generators/config/templates/capybara.rb +3 -5
- data/generators/config/templates/default.yml +19 -20
- data/generators/config/templates/drivers/browserstack.rb +31 -4
- data/generators/config/templates/drivers/crossbrowsertesting.rb +9 -11
- data/generators/config/templates/drivers/headless_chrome.rb +1 -1
- data/generators/config/templates/drivers/headless_firefox.rb +1 -1
- data/generators/config/templates/drivers/lambdatest.rb +30 -0
- data/generators/config/templates/drivers/sauce.rb +30 -2
- data/generators/config/templates/drivers/selenium.rb +1 -1
- data/generators/config/templates/drivers/selenium_grid.rb +3 -3
- data/generators/config/templates/drivers/testingbot.rb +29 -2
- data/generators/cucumber/templates/env.rb +1 -1
- data/generators/cucumber/templates/hooks.rb +9 -3
- data/generators/cucumber/templates/transformers.rb +1 -1
- data/generators/prerequisites/templates/factory_bot.rb +1 -1
- data/generators/root/templates/Gemfile.erb +4 -14
- data/generators/rspec/templates/spec_helper.rb +5 -5
- data/generators/turnip/templates/spec_helper.rb +5 -5
- data/generators/web/templates/example_page.rb +1 -1
- data/lib/howitzer/cache.rb +1 -1
- data/lib/howitzer/capybara_helpers.rb +46 -9
- data/lib/howitzer/email.rb +2 -2
- data/lib/howitzer/exceptions.rb +21 -21
- data/lib/howitzer/gmail_api/client.rb +13 -4
- data/lib/howitzer/log.rb +6 -6
- data/lib/howitzer/mail_adapters/mailgun.rb +1 -1
- data/lib/howitzer/mail_adapters/mailtrap.rb +3 -3
- data/lib/howitzer/mail_adapters/onesecmail.rb +80 -0
- data/lib/howitzer/mail_adapters/testmail.rb +102 -0
- data/lib/howitzer/mailgun_api/client.rb +3 -2
- data/lib/howitzer/mailgun_api/response.rb +1 -2
- data/lib/howitzer/mailtrap_api/client.rb +19 -1
- data/lib/howitzer/meta/actions.rb +13 -16
- data/lib/howitzer/meta/element.rb +12 -10
- data/lib/howitzer/onesecmail_api/client.rb +44 -0
- data/lib/howitzer/onesecmail_api.rb +7 -0
- data/lib/howitzer/testmail_api/client.rb +44 -0
- data/lib/howitzer/testmail_api.rb +7 -0
- data/lib/howitzer/utils/string_extensions.rb +6 -2
- data/lib/howitzer/version.rb +1 -1
- data/lib/howitzer/web/base_section.rb +1 -1
- data/lib/howitzer/web/capybara_methods_proxy.rb +11 -5
- data/lib/howitzer/web/element_dsl.rb +104 -45
- data/lib/howitzer/web/iframe_dsl.rb +2 -2
- data/lib/howitzer/web/page.rb +4 -14
- data/lib/howitzer/web/page_dsl.rb +15 -6
- data/lib/howitzer/web/page_validator.rb +25 -26
- data/lib/howitzer/web/section.rb +5 -2
- data/lib/howitzer/web/section_dsl.rb +64 -30
- data/lib/howitzer.rb +2 -2
- metadata +29 -165
- data/.coveralls.yml +0 -1
- data/.gitignore +0 -14
- data/.rspec +0 -3
- data/.rubocop.yml +0 -60
- data/.ruby-gemset +0 -1
- data/.travis.yml +0 -8
- data/Gemfile +0 -14
- data/ISSUE_TEMPLATE.md +0 -16
- data/MAINTENANCE.md +0 -32
- data/Rakefile +0 -38
- data/features/cli_help.feature +0 -31
- data/features/cli_new.feature +0 -393
- data/features/cli_unknown.feature +0 -17
- data/features/cli_update.feature +0 -223
- data/features/cli_version.feature +0 -14
- data/features/step_definitions/common_steps.rb +0 -34
- data/features/support/env.rb +0 -1
- data/generators/config/templates/drivers/appium.rb +0 -25
- data/generators/config/templates/drivers/poltergeist.rb +0 -11
- data/generators/config/templates/drivers/webkit.rb +0 -6
- data/generators/root/templates/.gitignore +0 -21
- data/generators/root/templates/.rubocop.yml.erb +0 -56
- data/generators/turnip/templates/.rspec +0 -1
- data/howitzer.gemspec +0 -39
- data/lib/howitzer/mail_adapters/debugmail.rb +0 -0
- data/spec/config/custom.yml +0 -9
- data/spec/spec_helper.rb +0 -73
- data/spec/support/generator_helper.rb +0 -21
- data/spec/support/logger_helper.rb +0 -13
- data/spec/support/shared_examples/capybara_context_holder.rb +0 -33
- data/spec/support/shared_examples/capybara_methods_proxy.rb +0 -94
- data/spec/support/shared_examples/dynamic_section_methods.rb +0 -35
- data/spec/support/shared_examples/element_dsl.rb +0 -242
- data/spec/support/shared_examples/meta_highlight_xpath.rb +0 -41
- data/spec/unit/generators/base_generator_spec.rb +0 -283
- data/spec/unit/generators/config_generator_spec.rb +0 -61
- data/spec/unit/generators/cucumber_generator_spec.rb +0 -62
- data/spec/unit/generators/emails_generator_spec.rb +0 -35
- data/spec/unit/generators/prerequisites_generator_spec.rb +0 -53
- data/spec/unit/generators/root_generator_spec.rb +0 -86
- data/spec/unit/generators/rspec_generator_spec.rb +0 -36
- data/spec/unit/generators/tasks_generator_spec.rb +0 -31
- data/spec/unit/generators/templates/cucumber_spec.rb +0 -97
- data/spec/unit/generators/templates/rspec_spec.rb +0 -88
- data/spec/unit/generators/templates/turnip_spec.rb +0 -98
- data/spec/unit/generators/turnip_generator_spec.rb +0 -52
- data/spec/unit/generators/web_generator_spec.rb +0 -52
- data/spec/unit/lib/cache_spec.rb +0 -85
- data/spec/unit/lib/capybara_helpers_spec.rb +0 -730
- data/spec/unit/lib/email_spec.rb +0 -186
- data/spec/unit/lib/gmail_api/client_spec.rb +0 -26
- data/spec/unit/lib/howitzer_spec.rb +0 -92
- data/spec/unit/lib/init_spec.rb +0 -2
- data/spec/unit/lib/log_spec.rb +0 -122
- data/spec/unit/lib/mail_adapters/abstract_spec.rb +0 -62
- data/spec/unit/lib/mail_adapters/gmail_spec.rb +0 -128
- data/spec/unit/lib/mail_adapters/mailgun_spec.rb +0 -158
- data/spec/unit/lib/mail_adapters/mailtrap_spec.rb +0 -130
- data/spec/unit/lib/mailgun_api/client_spec.rb +0 -80
- data/spec/unit/lib/mailgun_api/connector_spec.rb +0 -54
- data/spec/unit/lib/mailgun_api/response_spec.rb +0 -28
- data/spec/unit/lib/mailtrap_api/client_spec.rb +0 -67
- data/spec/unit/lib/meta/element_spec.rb +0 -59
- data/spec/unit/lib/meta/entry_spec.rb +0 -77
- data/spec/unit/lib/meta/iframe_spec.rb +0 -66
- data/spec/unit/lib/meta/section_spec.rb +0 -43
- data/spec/unit/lib/utils/string_extensions_spec.rb +0 -77
- data/spec/unit/lib/web/base_section_spec.rb +0 -43
- data/spec/unit/lib/web/element_dsl_spec.rb +0 -31
- data/spec/unit/lib/web/iframe_dsl_spec.rb +0 -203
- data/spec/unit/lib/web/page_dsl_spec.rb +0 -74
- data/spec/unit/lib/web/page_spec.rb +0 -385
- data/spec/unit/lib/web/page_validator_spec.rb +0 -276
- data/spec/unit/lib/web/section_dsl_spec.rb +0 -165
- data/spec/unit/lib/web/section_spec.rb +0 -70
- data/spec/unit/version_spec.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1044884bf6fe39dc63128f59f930a0d75ae80297a946d34d2464f47a30fe17fe
|
4
|
+
data.tar.gz: b5501960e801914414fc6569996a9cc219e601ea78dfea1dac28c7db9d582ac7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 450f74b4dec7185673b2faa9138c8afb4b9568be8680f38718728105ad5893a5e1abfb1d908e759a021fcd3af13093e67775537b3a109219b065b00c30a7f293
|
7
|
+
data.tar.gz: 0bc01379c520937ec1bd004fffcc44b9c558ff9c1c5eea1a292067d65f5d1661f9f5aaf806c5b0183d34e46c2591fc3bd9b71a0cc8288fc7e12b56d9946478d0
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,51 @@
|
|
1
|
-
## [In git](https://github.com/strongqa/howitzer/compare/v2.
|
1
|
+
## [In git](https://github.com/strongqa/howitzer/compare/v2.3.0...master)
|
2
2
|
|
3
3
|
### New Features
|
4
4
|
|
5
5
|
### Bug-fixes
|
6
6
|
|
7
|
+
## [2.5.0](https://github.com/strongqa/howitzer/compare/v2.4.0...v2.5.0) (2022-08-16)
|
8
|
+
|
9
|
+
|
10
|
+
### Features
|
11
|
+
|
12
|
+
* 1secMail integration ([#316](https://github.com/strongqa/howitzer/issues/316)) ([6850758](https://github.com/strongqa/howitzer/commit/6850758370bd293d241f95c2a3cc0163c6fb3062))
|
13
|
+
* testmail.app integration ([#314](https://github.com/strongqa/howitzer/issues/314)) ([7f62bae](https://github.com/strongqa/howitzer/commit/7f62bae2e7e91200e02ed98acded9070726f3fc1))
|
14
|
+
|
15
|
+
|
16
|
+
### Bug Fixes
|
17
|
+
|
18
|
+
* mailtrap integration update ([#313](https://github.com/strongqa/howitzer/issues/313)) ([49e7390](https://github.com/strongqa/howitzer/commit/49e73909f7033d2986b0f5713bbbcbea7231ade0))
|
19
|
+
|
20
|
+
## [2.4.0](https://github.com/strongqa/howitzer/compare/v2.3.0...v2.4.0) (2022-07-22)
|
21
|
+
|
22
|
+
|
23
|
+
### Features
|
24
|
+
|
25
|
+
* LambdaTest support ([#305](https://github.com/strongqa/howitzer/issues/305)) ([eca5b8a](https://github.com/strongqa/howitzer/commit/eca5b8a6e4e30c4b9a7640ee999c061cd8e71e09))
|
26
|
+
* RegExp email subject matcher for Mailgun ([#304](https://github.com/strongqa/howitzer/issues/304)) ([598c9a2](https://github.com/strongqa/howitzer/commit/598c9a27b5dd8047c212ad050f86b78fa72d326d))
|
27
|
+
* Selenium 4 support ([#303](https://github.com/strongqa/howitzer/issues/303)) ([c5bf2d8](https://github.com/strongqa/howitzer/commit/c5bf2d8426e36f97b9fa109a783803c7b1bb538d))
|
28
|
+
|
29
|
+
|
30
|
+
### Continuous Integration
|
31
|
+
|
32
|
+
* release-please integration ([#307](https://github.com/strongqa/howitzer/issues/307)) ([bd2f53e](https://github.com/strongqa/howitzer/commit/bd2f53e75c9ef283daadf8f9063d827c4f885a77))
|
33
|
+
|
34
|
+
## [v2.3.0](https://github.com/strongqa/howitzer/compare/v2.2.0...v2.3.0)
|
35
|
+
|
36
|
+
### New Features
|
37
|
+
- Support Ruby 3.0 (minimum version is 2.6.8)
|
38
|
+
- Unlock Activesupport 6.x
|
39
|
+
- Support latest versions of Cucumber
|
40
|
+
- Integrate rubocop-rspec linter
|
41
|
+
- Use latest version Rubocop
|
42
|
+
- Stop capybara-webkit support
|
43
|
+
- Stop poltergeist support
|
44
|
+
- Stop Apium driver support
|
45
|
+
- remove gmail gem from dependencies and add it only when it is really required
|
46
|
+
- Migrate to new Travis CI domain
|
47
|
+
- Replace abandoned Coveralls integration with Codecov [codecov.io](https://codecov.io/gh/strongqa/howitzer/)
|
48
|
+
|
7
49
|
## [v2.2.0](https://github.com/strongqa/howitzer/compare/v2.1.1...v2.2.0)
|
8
50
|
|
9
51
|
### New Features
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
<p align="center" style="overflow: hidden;">
|
2
|
-
<a href="
|
2
|
+
<a href="https://howitzer-framework.io">
|
3
3
|
<img src="https://raw.githubusercontent.com/strongqa/howitzer/gh-pages/images/howitzer-logo.png" alt="Howitzer" />
|
4
4
|
</a>
|
5
5
|
<br/>
|
6
6
|
|
7
|
-
<p align="center"><b>Ruby-based framework for acceptance testing of web applications.</b></p>
|
7
|
+
<p align="center"><b>A Ruby-based framework for acceptance testing of web applications.</b></p>
|
8
8
|
|
9
9
|
<p align="center">The framework was built with modern patterns, techniques, and tools in automated testing in order to speed up tests development and simplify supporting.</p>
|
10
10
|
|
11
11
|
<p align="center">
|
12
12
|
<a href="https://gitter.im/strongqa/howitzer"><img src="https://badges.gitter.im/Join%20Chat.svg" /></a>
|
13
|
-
<a href="https://rubygems.org/gems/howitzer"><img src="
|
14
|
-
<a href="https://travis-ci.
|
13
|
+
<a href="https://rubygems.org/gems/howitzer"><img src="https://img.shields.io/gem/v/howitzer.svg" /></a>
|
14
|
+
<a href="https://app.travis-ci.com/github/strongqa/howitzer"><img src="https://app.travis-ci.com/strongqa/howitzer.svg?branch=master" /></a>
|
15
15
|
<a href="https://codeclimate.com/github/strongqa/howitzer"><img src="https://codeclimate.com/github/strongqa/howitzer.png" /></a>
|
16
|
-
<a href=
|
17
|
-
|
16
|
+
<a href="https://codecov.io/gh/strongqa/howitzer">
|
17
|
+
<img src="https://codecov.io/gh/strongqa/howitzer/branch/master/graph/badge.svg?token=vB8DYQtmjA"/>
|
18
|
+
</a>
|
19
|
+
<a href="https://github.com/strongqa/howitzer/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>
|
18
20
|
</p>
|
19
21
|
|
20
22
|
</p>
|
@@ -24,13 +26,13 @@
|
|
24
26
|
- Fast installation and configuration of the complete testing infrastructure (takes less than 5 minutes).
|
25
27
|
- Elegant, intuitive and powerful Ruby language underneath.
|
26
28
|
- Possibility to choose your favorite BDD tool (Cucumber, RSpec or Turnip).
|
27
|
-
- Integration with SauceLabs, Testingbot, BrowserStack, CrossBrowserTesting cloud services.
|
29
|
+
- Integration with SauceLabs, Testingbot, BrowserStack, CrossBrowserTesting, LambdaTest cloud services.
|
28
30
|
- Integration with MailGun, Gmail, Mailtrap email services.
|
29
31
|
- Easy tests support based on the best patterns, techniques, principles.
|
30
32
|
- Ability to execute tests against to both browserless driver and actual browsers with no changes in your tests.
|
31
33
|
|
32
34
|
## Documentation
|
33
|
-
Refer to the [GETTING STARTED](
|
35
|
+
Refer to the [GETTING STARTED](https://docs.howitzer-framework.io) document to start working with *Howitzer*.
|
34
36
|
|
35
37
|
You can also find the Rdoc documentation on [Rubygems](https://rubygems.org/gems/howitzer).
|
36
38
|
|
@@ -41,16 +43,13 @@ You can also find the Rdoc documentation on [Rubygems](https://rubygems.org/gems
|
|
41
43
|
|
42
44
|
## Requirements
|
43
45
|
* Supported OS: Mac OS X, Linux, Windows
|
44
|
-
* [Ruby](https://www.ruby-lang.org/en/downloads/) 2.
|
46
|
+
* [Ruby](https://www.ruby-lang.org/en/downloads/) 2.6.8+
|
45
47
|
* [DevKit](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit#installation-instructions) (For **Windows** only)
|
46
|
-
* [PhantomJS](http://phantomjs.org/download.html) (For **poltergeist** driver only)
|
47
48
|
* [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) (For **chrome** selenium browser, 2.29+ for headless mode)
|
48
49
|
* [GeckoDriver](https://github.com/mozilla/geckodriver/releases) (For **firefox** selenium browser)
|
49
50
|
* [SafariDriver](https://webkit.org/blog/6900/webdriver-support-in-safari-10/) (For **safari** selenium browser)
|
50
|
-
* [QT](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit) (For **webkit** driver only)
|
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/index.html) and [Appium](http://appium.io/getting-started.html) (For Appium driver)
|
54
53
|
## Setup
|
55
54
|
To install, type
|
56
55
|
|
@@ -67,7 +66,7 @@ To generate the project with [Cucumber](https://cucumber.io/), type:
|
|
67
66
|
howitzer new <PROJECT NAME> --cucumber
|
68
67
|
```
|
69
68
|
|
70
|
-
With [Rspec](
|
69
|
+
With [Rspec](https://rspec.info/):
|
71
70
|
|
72
71
|
```bash
|
73
72
|
howitzer new <PROJECT NAME> --rspec
|
@@ -145,7 +144,7 @@ community](https://github.com/strongqa/howitzer/graphs/contributors).
|
|
145
144
|
License
|
146
145
|
-------
|
147
146
|
|
148
|
-
howitzer is Copyright © 2012-
|
147
|
+
howitzer is Copyright © 2012-2021 Roman Parashchenko and StrongQA LLC. It is free
|
149
148
|
software, and may be redistributed under the terms specified in the
|
150
149
|
[LICENSE](LICENSE) file.
|
151
150
|
|
@@ -154,11 +153,11 @@ About StrongQA
|
|
154
153
|
|
155
154
|
![StrongQA](https://github.com/strongqa/howitzer/blob/gh-pages/images/strongqa-logo.png)
|
156
155
|
|
157
|
-
howitzer is maintained and funded by StrongQA,
|
158
|
-
The names and logos for StrongQA are trademarks of StrongQA,
|
156
|
+
howitzer is maintained and funded by StrongQA, LLC.
|
157
|
+
The names and logos for StrongQA are trademarks of StrongQA, LLC.
|
159
158
|
|
160
159
|
We love open source software!
|
161
160
|
See [our other projects][testing_solutions] or [hire us][hire] to consult and develop testing solutions.
|
162
161
|
|
163
|
-
[testing_solutions]:
|
162
|
+
[testing_solutions]: https://strongqa.com/services/testing-solutions?utm_source=github
|
164
163
|
[hire]: https://strongqa.com?utm_source=github
|
@@ -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
|
@@ -9,17 +9,15 @@ module Howitzer
|
|
9
9
|
{ source: 'custom.yml', destination: 'config/custom.yml' },
|
10
10
|
{ source: 'capybara.rb', destination: 'config/capybara.rb' },
|
11
11
|
{ source: 'default.yml', destination: 'config/default.yml' },
|
12
|
-
{ source: 'drivers/appium.rb', destination: 'config/drivers/appium.rb' },
|
13
12
|
{ source: 'drivers/browserstack.rb', destination: 'config/drivers/browserstack.rb' },
|
14
13
|
{ source: 'drivers/crossbrowsertesting.rb', destination: 'config/drivers/crossbrowsertesting.rb' },
|
15
14
|
{ source: 'drivers/headless_chrome.rb', destination: 'config/drivers/headless_chrome.rb' },
|
16
15
|
{ source: 'drivers/headless_firefox.rb', destination: 'config/drivers/headless_firefox.rb' },
|
17
|
-
{ source: 'drivers/
|
16
|
+
{ source: 'drivers/lambdatest.rb', destination: 'config/drivers/lambdatest.rb' },
|
18
17
|
{ source: 'drivers/sauce.rb', destination: 'config/drivers/sauce.rb' },
|
19
18
|
{ source: 'drivers/selenium.rb', destination: 'config/drivers/selenium.rb' },
|
20
19
|
{ source: 'drivers/selenium_grid.rb', destination: 'config/drivers/selenium_grid.rb' },
|
21
|
-
{ source: 'drivers/testingbot.rb', destination: 'config/drivers/testingbot.rb' }
|
22
|
-
{ source: 'drivers/webkit.rb', destination: 'config/drivers/webkit.rb' }
|
20
|
+
{ source: 'drivers/testingbot.rb', destination: 'config/drivers/testingbot.rb' }
|
23
21
|
] }
|
24
22
|
end
|
25
23
|
|
@@ -1,20 +1,18 @@
|
|
1
1
|
HOWITZER_KNOWN_DRIVERS = %i[
|
2
|
-
appium
|
3
2
|
selenium
|
4
3
|
selenium_grid
|
5
|
-
webkit
|
6
|
-
poltergeist
|
7
4
|
sauce
|
8
5
|
testingbot
|
9
6
|
browserstack
|
10
7
|
crossbrowsertesting
|
8
|
+
lambdatest
|
11
9
|
headless_chrome
|
12
10
|
headless_firefox
|
13
11
|
].freeze
|
14
12
|
|
15
13
|
unless HOWITZER_KNOWN_DRIVERS.include?(Howitzer.driver.to_s.to_sym)
|
16
|
-
raise Howitzer::UnknownDriverError, "Unknown '#{Howitzer.driver}' driver." \
|
17
|
-
|
14
|
+
raise Howitzer::UnknownDriverError, "Unknown '#{Howitzer.driver}' driver. " \
|
15
|
+
"Check your settings, it should be one of #{HOWITZER_KNOWN_DRIVERS}"
|
18
16
|
end
|
19
17
|
|
20
18
|
Capybara.configure do |config|
|
@@ -26,16 +26,17 @@
|
|
26
26
|
# Specify SEED to reproduce the shuffling from a previous run. e.g. 'random:5738'
|
27
27
|
test_order: defined
|
28
28
|
|
29
|
-
# Specify one of the following drivers: selenium, selenium_grid,
|
30
|
-
# testingbot, browserstack, crossbrowsertesting,
|
31
|
-
|
29
|
+
# Specify one of the following drivers: selenium, selenium_grid, sauce,
|
30
|
+
# testingbot, browserstack, crossbrowsertesting, lambdatest, headless_chrome,
|
31
|
+
# headless_firefox
|
32
|
+
driver: headless_chrome
|
32
33
|
|
33
34
|
# -Selenium-
|
34
35
|
# specify one of next browsers: iexplore (ie), firefox (ff), chrome, safari
|
35
36
|
selenium_browser: ff
|
36
37
|
|
37
38
|
# -Headless Chrome-
|
38
|
-
# List of available flags (
|
39
|
+
# List of available flags (https://peter.sh/experiments/chromium-command-line-switches/)
|
39
40
|
headless_chrome_flags: "window-size=1920x1080, disable-gpu"
|
40
41
|
|
41
42
|
# -Headless Firefox-
|
@@ -45,20 +46,6 @@
|
|
45
46
|
# -Selenium Grid-
|
46
47
|
selenium_hub_url: "http://example.com:4444/wd/hub"
|
47
48
|
|
48
|
-
# -Poltergeist-
|
49
|
-
# specify settings for poltergeist
|
50
|
-
phantom_ignore_js_errors: false
|
51
|
-
phantom_ignore_ssl_errors: true
|
52
|
-
|
53
|
-
# -Appium- (https://appium.io/docs/en/writing-running-appium/caps/)
|
54
|
-
appium_url: "http://localhost:80/wd/hub"
|
55
|
-
appium_platform_name: "iOS"
|
56
|
-
appium_platform_version: "10.0"
|
57
|
-
appium_browser_name: "Safari"
|
58
|
-
appium_device_name: "iPad Air 2 Simulator"
|
59
|
-
appium_device_orientation: "portrait"
|
60
|
-
|
61
|
-
|
62
49
|
rspec_wait_timeout: 10
|
63
50
|
|
64
51
|
###########################################################
|
@@ -68,7 +55,7 @@
|
|
68
55
|
cloud_auth_pass: api_key_or_api_secret_or_access_key
|
69
56
|
cloud_platform: any
|
70
57
|
cloud_browser_name: Chrome
|
71
|
-
cloud_browser_version: '
|
58
|
+
cloud_browser_version: 'latest'
|
72
59
|
cloud_max_duration: '1800'
|
73
60
|
cloud_http_idle_timeout: 40
|
74
61
|
|
@@ -95,6 +82,11 @@
|
|
95
82
|
cloud_cbt_record_video: 'true'
|
96
83
|
cloud_cbt_record_network: 'true'
|
97
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
|
+
|
98
90
|
###########################################################
|
99
91
|
# CAPYBARA SETTINGS #
|
100
92
|
###########################################################
|
@@ -117,7 +109,7 @@
|
|
117
109
|
mail_wait_time: 60
|
118
110
|
mail_sleep_time: 3
|
119
111
|
|
120
|
-
# -Mailgun- (
|
112
|
+
# -Mailgun- (https://mailgun.com/)
|
121
113
|
mailgun_key: mailgun_account_private_key
|
122
114
|
mailgun_domain: mailgun_domain_with_stored_method
|
123
115
|
|
@@ -128,3 +120,10 @@
|
|
128
120
|
# -Gmail-
|
129
121
|
gmail_login: gmail_address
|
130
122
|
gmail_password: gmail_password
|
123
|
+
|
124
|
+
# -testmail.app-
|
125
|
+
testmail_api_key: testmail_api_key
|
126
|
+
testmail_namespace: testmail_namespace
|
127
|
+
|
128
|
+
# 1secMail
|
129
|
+
onesecmail_domain: 1secmail.com
|
@@ -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
|
17
|
-
|
39
|
+
caps
|
40
|
+
end
|
41
|
+
|
42
|
+
Capybara.register_driver :browserstack do |app|
|
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 = "http://#{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
|
|
@@ -7,7 +7,7 @@ Capybara.register_driver :headless_chrome do |app|
|
|
7
7
|
startup_flags.concat(Howitzer.headless_chrome_flags.split(/\s*,\s*/)) if Howitzer.headless_chrome_flags
|
8
8
|
options = Selenium::WebDriver::Chrome::Options.new(args: startup_flags)
|
9
9
|
params = { browser: :chrome, options: options }
|
10
|
-
Capybara::Selenium::Driver.new app, params
|
10
|
+
Capybara::Selenium::Driver.new app, **params
|
11
11
|
end
|
12
12
|
|
13
13
|
Capybara::Screenshot.class_eval do
|
@@ -13,7 +13,7 @@ Capybara.register_driver :headless_firefox do |app|
|
|
13
13
|
end
|
14
14
|
options = Selenium::WebDriver::Firefox::Options.new(args: startup_flags, profile: ff_profile)
|
15
15
|
params = { browser: :firefox, options: options }
|
16
|
-
Capybara::Selenium::Driver.new app, params
|
16
|
+
Capybara::Selenium::Driver.new app, **params
|
17
17
|
end
|
18
18
|
|
19
19
|
Capybara.javascript_driver = :headless_firefox
|
@@ -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
|
19
|
-
|
42
|
+
caps
|
43
|
+
end
|
44
|
+
|
45
|
+
Capybara.register_driver :sauce do |app|
|
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
|
|
@@ -20,5 +20,5 @@ Capybara.register_driver :selenium do |app|
|
|
20
20
|
args << "user-agent=#{Howitzer.user_agent}" if Howitzer.user_agent.present?
|
21
21
|
params[:options] = Selenium::WebDriver::Chrome::Options.new(args: args)
|
22
22
|
end
|
23
|
-
Capybara::Selenium::Driver.new app, params
|
23
|
+
Capybara::Selenium::Driver.new app, **params
|
24
24
|
end
|
@@ -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
|
18
|
-
|
40
|
+
caps
|
41
|
+
end
|
42
|
+
|
43
|
+
Capybara.register_driver :testingbot do |app|
|
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
|
|
@@ -14,7 +14,7 @@ AfterConfiguration do |config|
|
|
14
14
|
if Howitzer.test_order.present?
|
15
15
|
order, seed = Howitzer.test_order.split(':')
|
16
16
|
config.instance_variable_get(:@options)[:order] = order
|
17
|
-
config.instance_variable_get(:@options)[:seed]
|
17
|
+
config.instance_variable_get(:@options)[:seed] ||= seed
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -1,6 +1,12 @@
|
|
1
1
|
Before do |scenario|
|
2
2
|
Capybara.use_default_driver
|
3
|
-
|
3
|
+
feature_name = \
|
4
|
+
if Gem::Requirement.new('>3').satisfied_by?(Gem::Version.new(Cucumber::VERSION))
|
5
|
+
File.read(scenario.location.file)[/Feature:\s(.+)/, 1]
|
6
|
+
else
|
7
|
+
scenario.feature.name
|
8
|
+
end
|
9
|
+
Howitzer::Log.print_feature_name(feature_name)
|
4
10
|
Howitzer::Log.print_scenario_name(scenario.name)
|
5
11
|
@session_start = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
|
6
12
|
end
|
@@ -9,8 +15,8 @@ After do |scenario|
|
|
9
15
|
if CapybaraHelpers.cloud_driver?
|
10
16
|
Howitzer::Cache.store(:cloud, :status, false) if scenario.failed?
|
11
17
|
session_end = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
|
12
|
-
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end}" \
|
13
|
-
|
18
|
+
Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end} " \
|
19
|
+
"URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
|
14
20
|
elsif CapybaraHelpers.ie_browser?
|
15
21
|
Howitzer::Log.info 'IE reset session'
|
16
22
|
Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# end
|
16
16
|
ParameterType(
|
17
17
|
name: 'factory',
|
18
|
-
regexp: /(?:factory|FACTORY)_([A-Za-z_]+)(\d*)(?:\[
|
18
|
+
regexp: /(?:factory|FACTORY)_([A-Za-z_]+)(\d*)(?:\[:(.+)\])?/,
|
19
19
|
transformer: lambda do |_, factory, num, property|
|
20
20
|
res = FactoryBot.given_by_number(factory.downcase, num)
|
21
21
|
res = res.send(property) if property
|