howitzer 2.2.0 → 2.5.0
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 +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
|

|
|
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
|