howitzer 2.0.3 → 2.3.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.
Files changed (139) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +69 -11
  3. data/LICENSE +1 -1
  4. data/README.md +21 -17
  5. data/bin/howitzer +7 -6
  6. data/generators/base_generator.rb +31 -17
  7. data/generators/config/config_generator.rb +11 -3
  8. data/generators/config/templates/boot.rb +3 -3
  9. data/generators/config/templates/capybara.rb +6 -131
  10. data/generators/config/templates/default.yml +34 -13
  11. data/generators/config/templates/drivers/appium.rb +25 -0
  12. data/generators/config/templates/drivers/browserstack.rb +23 -0
  13. data/generators/config/templates/drivers/crossbrowsertesting.rb +29 -0
  14. data/generators/config/templates/drivers/headless_chrome.rb +15 -0
  15. data/generators/config/templates/drivers/headless_firefox.rb +23 -0
  16. data/generators/config/templates/drivers/sauce.rb +25 -0
  17. data/generators/config/templates/drivers/selenium.rb +24 -0
  18. data/generators/config/templates/drivers/selenium_grid.rb +31 -0
  19. data/generators/config/templates/drivers/testingbot.rb +24 -0
  20. data/generators/cucumber/cucumber_generator.rb +2 -2
  21. data/generators/cucumber/templates/common_steps.rb +3 -3
  22. data/generators/cucumber/templates/cucumber.rake +5 -13
  23. data/generators/cucumber/templates/cuke_sniffer.rake +2 -2
  24. data/generators/cucumber/templates/env.rb +9 -1
  25. data/generators/cucumber/templates/hooks.rb +8 -2
  26. data/generators/cucumber/templates/transformers.rb +11 -25
  27. data/generators/emails/emails_generator.rb +2 -2
  28. data/generators/emails/templates/example_email.rb +1 -1
  29. data/generators/prerequisites/prerequisites_generator.rb +3 -3
  30. data/generators/prerequisites/templates/base.rb +1 -1
  31. data/generators/prerequisites/templates/{factory_girl.rb → factory_bot.rb} +7 -6
  32. data/generators/prerequisites/templates/users.rb +1 -1
  33. data/generators/root/root_generator.rb +3 -3
  34. data/generators/root/templates/Gemfile.erb +16 -22
  35. data/generators/rspec/rspec_generator.rb +2 -2
  36. data/generators/rspec/templates/rspec.rake +8 -8
  37. data/generators/rspec/templates/spec_helper.rb +6 -5
  38. data/generators/tasks/tasks_generator.rb +2 -2
  39. data/generators/turnip/templates/spec_helper.rb +6 -5
  40. data/generators/turnip/turnip_generator.rb +2 -2
  41. data/generators/web/templates/example_page.rb +1 -1
  42. data/generators/web/web_generator.rb +2 -2
  43. data/lib/howitzer/cache.rb +20 -19
  44. data/lib/howitzer/capybara_helpers.rb +58 -13
  45. data/lib/howitzer/email.rb +3 -2
  46. data/lib/howitzer/exceptions.rb +21 -20
  47. data/lib/howitzer/gmail_api/client.rb +31 -0
  48. data/lib/howitzer/gmail_api.rb +7 -0
  49. data/lib/howitzer/log.rb +6 -6
  50. data/lib/howitzer/mail_adapters/gmail.rb +96 -0
  51. data/lib/howitzer/mail_adapters/mailgun.rb +4 -2
  52. data/lib/howitzer/mail_adapters/mailtrap.rb +108 -0
  53. data/lib/howitzer/mailgun_api/client.rb +3 -2
  54. data/lib/howitzer/mailgun_api/connector.rb +1 -0
  55. data/lib/howitzer/mailgun_api/response.rb +1 -2
  56. data/lib/howitzer/mailtrap_api/client.rb +52 -0
  57. data/lib/howitzer/mailtrap_api.rb +7 -0
  58. data/lib/howitzer/meta/actions.rb +35 -0
  59. data/lib/howitzer/meta/element.rb +40 -0
  60. data/lib/howitzer/meta/entry.rb +62 -0
  61. data/lib/howitzer/meta/iframe.rb +41 -0
  62. data/lib/howitzer/meta/section.rb +30 -0
  63. data/lib/howitzer/meta.rb +11 -0
  64. data/lib/howitzer/utils/string_extensions.rb +6 -2
  65. data/lib/howitzer/version.rb +1 -1
  66. data/lib/howitzer/web/base_section.rb +1 -1
  67. data/lib/howitzer/web/capybara_context_holder.rb +1 -0
  68. data/lib/howitzer/web/capybara_methods_proxy.rb +15 -6
  69. data/lib/howitzer/web/element_dsl.rb +104 -44
  70. data/lib/howitzer/web/iframe_dsl.rb +23 -3
  71. data/lib/howitzer/web/page.rb +16 -4
  72. data/lib/howitzer/web/page_dsl.rb +19 -7
  73. data/lib/howitzer/web/page_validator.rb +27 -26
  74. data/lib/howitzer/web/section.rb +13 -2
  75. data/lib/howitzer/web/section_dsl.rb +65 -30
  76. data/lib/howitzer.rb +66 -10
  77. metadata +67 -133
  78. data/.coveralls.yml +0 -1
  79. data/.gitignore +0 -14
  80. data/.rspec +0 -3
  81. data/.rubocop.yml +0 -44
  82. data/.ruby-gemset +0 -1
  83. data/.travis.yml +0 -7
  84. data/Gemfile +0 -13
  85. data/MAINTENANCE.md +0 -32
  86. data/Rakefile +0 -22
  87. data/features/cli_help.feature +0 -31
  88. data/features/cli_new.feature +0 -349
  89. data/features/cli_unknown.feature +0 -17
  90. data/features/cli_update.feature +0 -178
  91. data/features/cli_version.feature +0 -14
  92. data/features/step_definitions/common_steps.rb +0 -29
  93. data/features/support/env.rb +0 -1
  94. data/features/support/transformers.rb +0 -3
  95. data/generators/root/templates/.gitignore +0 -21
  96. data/generators/root/templates/.rubocop.yml +0 -35
  97. data/generators/turnip/templates/.rspec +0 -1
  98. data/howitzer.gemspec +0 -37
  99. data/lib/howitzer/mail_adapters/debugmail.rb +0 -0
  100. data/spec/config/custom.yml +0 -9
  101. data/spec/spec_helper.rb +0 -72
  102. data/spec/support/generator_helper.rb +0 -21
  103. data/spec/support/logger_helper.rb +0 -13
  104. data/spec/support/mailgun_unit_client.rb +0 -68
  105. data/spec/support/shared_examples/capybara_context_holder.rb +0 -33
  106. data/spec/support/shared_examples/capybara_methods_proxy.rb +0 -94
  107. data/spec/support/shared_examples/dynamic_section_methods.rb +0 -35
  108. data/spec/support/shared_examples/element_dsl.rb +0 -242
  109. data/spec/unit/generators/base_generator_spec.rb +0 -272
  110. data/spec/unit/generators/config_generator_spec.rb +0 -38
  111. data/spec/unit/generators/cucumber_generator_spec.rb +0 -62
  112. data/spec/unit/generators/emails_generator_spec.rb +0 -35
  113. data/spec/unit/generators/prerequisites_generator_spec.rb +0 -53
  114. data/spec/unit/generators/root_generator_spec.rb +0 -72
  115. data/spec/unit/generators/rspec_generator_spec.rb +0 -36
  116. data/spec/unit/generators/tasks_generator_spec.rb +0 -31
  117. data/spec/unit/generators/turnip_generator_spec.rb +0 -52
  118. data/spec/unit/generators/web_generator_spec.rb +0 -52
  119. data/spec/unit/lib/cache_spec.rb +0 -85
  120. data/spec/unit/lib/capybara_helpers_spec.rb +0 -696
  121. data/spec/unit/lib/email_spec.rb +0 -186
  122. data/spec/unit/lib/howitzer_spec.rb +0 -40
  123. data/spec/unit/lib/init_spec.rb +0 -2
  124. data/spec/unit/lib/log_spec.rb +0 -122
  125. data/spec/unit/lib/mail_adapters/abstract_spec.rb +0 -62
  126. data/spec/unit/lib/mail_adapters/mailgun_spec.rb +0 -163
  127. data/spec/unit/lib/mailgun_api/client_spec.rb +0 -58
  128. data/spec/unit/lib/mailgun_api/connector_spec.rb +0 -54
  129. data/spec/unit/lib/mailgun_api/response_spec.rb +0 -28
  130. data/spec/unit/lib/utils/string_extensions_spec.rb +0 -77
  131. data/spec/unit/lib/web/base_section_spec.rb +0 -43
  132. data/spec/unit/lib/web/element_dsl_spec.rb +0 -22
  133. data/spec/unit/lib/web/iframe_dsl_spec.rb +0 -144
  134. data/spec/unit/lib/web/page_dsl_spec.rb +0 -74
  135. data/spec/unit/lib/web/page_spec.rb +0 -349
  136. data/spec/unit/lib/web/page_validator_spec.rb +0 -276
  137. data/spec/unit/lib/web/section_dsl_spec.rb +0 -165
  138. data/spec/unit/lib/web/section_spec.rb +0 -63
  139. data/spec/unit/version_spec.rb +0 -8
@@ -1 +0,0 @@
1
- require 'aruba/cucumber'
@@ -1,3 +0,0 @@
1
- Transform /<HOWITZER_VERSION>/ do |text|
2
- text.gsub('<HOWITZER_VERSION>', Howitzer::VERSION)
3
- end
@@ -1,21 +0,0 @@
1
- .idea/
2
- custom.yml
3
- bin/
4
- log/
5
- eylogs/
6
- spec/results/
7
- spec/sandbox/
8
- tmp/
9
- *.swp
10
- *.orig
11
- .rakeTasks
12
- .bundle
13
- .DS_STORE
14
- .DS_Store
15
- *.xml
16
- *.log
17
- *.pem
18
- build-number.txt
19
- sauce_connect.log*
20
- *.*~
21
- capybara-*.html
@@ -1,35 +0,0 @@
1
- # See full list of defaults here: https://github.com/bbatsov/rubocop/blob/master/config/default.yml
2
- # To see all cops used see here: https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
3
-
4
- AllCops:
5
- TargetRubyVersion: 2.3
6
- Include:
7
- - Rakefile
8
- - Gemfile
9
-
10
- LineLength:
11
- Max: 120
12
-
13
- Style/CaseIndentation:
14
- Enabled: false
15
-
16
- Style/EmptyElse:
17
- Enabled: false
18
-
19
- Lint/AmbiguousRegexpLiteral:
20
- Enabled: false
21
-
22
- Lint/AmbiguousBlockAssociation:
23
- Enabled: false
24
-
25
- Style/CaseEquality:
26
- Enabled: false
27
-
28
- Documentation:
29
- Enabled: false
30
-
31
- Style/FrozenStringLiteralComment:
32
- Enabled: false
33
-
34
- Metrics/ModuleLength:
35
- Max: 150
@@ -1 +0,0 @@
1
- -r turnip/rspec
data/howitzer.gemspec DELETED
@@ -1,37 +0,0 @@
1
- require File.expand_path('../lib/howitzer/version', __FILE__)
2
-
3
- Gem::Specification.new do |gem|
4
- gem.author = 'Roman Parashchenko'
5
- gem.email = 'howitzer@strongqa.com'
6
- gem.description = 'Howitzer uses the best practices and design patterns allowing to generate a test project in' \
7
- ' less than 5 minutes. It has out-of-the-box configurations for parallel cross-browser testing in the cloud.'
8
- gem.summary = 'Ruby based framework for acceptance testing'
9
- gem.homepage = 'http://strongqa.github.io/howitzer/'
10
- gem.license = 'MIT'
11
-
12
- gem.bindir = 'bin'
13
- gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
14
- gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
15
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
16
- gem.name = 'howitzer'
17
- gem.require_paths = ['lib']
18
- gem.version = Howitzer::VERSION
19
- gem.required_ruby_version = '>= 2.2.2'
20
-
21
- gem.add_runtime_dependency 'activesupport', '~>5.0'
22
- gem.add_runtime_dependency 'capybara', ['>= 2.1', '< 3.0']
23
- gem.add_runtime_dependency 'gli'
24
- gem.add_runtime_dependency 'launchy'
25
- gem.add_runtime_dependency 'log4r', '~>1.1.10'
26
- gem.add_runtime_dependency 'nokogiri', '~> 1.6' if gem.platform.to_s =~ /mswin|mingw/
27
- gem.add_runtime_dependency 'rake'
28
- gem.add_runtime_dependency 'rspec', '~>3.2'
29
- gem.add_runtime_dependency 'rspec-wait'
30
- gem.add_runtime_dependency 'selenium-webdriver', '< 4.0'
31
- gem.add_runtime_dependency 'sexy_settings'
32
-
33
- gem.add_development_dependency('aruba')
34
- gem.add_development_dependency('ffaker')
35
- gem.add_development_dependency('fuubar')
36
- gem.add_development_dependency('yard')
37
- end
File without changes
@@ -1,9 +0,0 @@
1
- log_dir: "spec/log"
2
- driver: selenium
3
- mailgun_domain: mailgun@test.domain
4
- mailgun_sleep_time: 0.05
5
- page_load_idle_timeout: 0.1
6
- capybara_wait_time: 5
7
- cloud_http_idle_timeout: 10
8
- hide_datetime_from_log: true
9
- maximized_window: false
data/spec/spec_helper.rb DELETED
@@ -1,72 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'simplecov'
4
- require 'coveralls'
5
- Coveralls.wear!
6
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
7
- [
8
- SimpleCov::Formatter::HTMLFormatter,
9
- Coveralls::SimpleCov::Formatter
10
- ]
11
- )
12
-
13
- SimpleCov.start do
14
- add_filter '/spec/'
15
- add_filter '/config/'
16
- add_filter do |source_file|
17
- source_file.lines.count < 5
18
- end
19
- add_group 'generators', '/generators'
20
- add_group 'lib', '/lib'
21
- end
22
-
23
- require 'tmpdir'
24
- require 'ffaker'
25
- require 'capybara'
26
- require 'json'
27
- require 'capybara/dsl'
28
- require 'active_support'
29
- require 'active_support/deprecation'
30
- require 'active_support/deprecation/method_wrappers'
31
- require 'active_support/core_ext'
32
- require 'repeater'
33
- require 'sexy_settings'
34
-
35
- SexySettings.configure do |config|
36
- config.path_to_default_settings = File.expand_path(
37
- 'default.yml',
38
- File.join(__dir__, '..', 'generators', 'config', 'templates')
39
- )
40
- config.path_to_custom_settings = File.expand_path(
41
- 'custom.yml',
42
- File.join(__dir__, 'config')
43
- )
44
- end
45
-
46
- puts SexySettings::Base.instance.as_formatted_text
47
-
48
- require 'howitzer'
49
- require 'howitzer/exceptions'
50
-
51
- def project_path
52
- File.expand_path(File.join(__dir__, '..'))
53
- end
54
-
55
- def lib_path
56
- File.join(project_path, 'lib')
57
- end
58
-
59
- def generators_path
60
- File.join(project_path, 'generators')
61
- end
62
-
63
- def log_path
64
- File.join(project_path, 'spec/log')
65
- end
66
-
67
- Dir[File.join(__dir__, 'support', '**', '*.rb')].each { |f| require f }
68
-
69
- RSpec.configure do |config|
70
- config.include Howitzer::GeneratorHelper
71
- config.disable_monkey_patching!
72
- end
@@ -1,21 +0,0 @@
1
- require 'fileutils'
2
- require_relative '../../generators/base_generator'
3
-
4
- module Howitzer
5
- module GeneratorHelper
6
- def file_tree_info(root)
7
- Dir["#{root}/**/.*", "#{root}/**/*"].sort_by { |name| name.sub(root, '') }.map do |name|
8
- hash = { name: name.sub(root, ''), is_directory: File.directory?(name) }
9
- hash[:size] = File.stat(name).size unless hash[:is_directory]
10
- hash
11
- end
12
- end
13
-
14
- def template_file_size(root_directory, file)
15
- File.size(File.join(generators_path, root_directory, 'templates', file))
16
- end
17
- end
18
- end
19
- Howitzer::BaseGenerator.logger = StringIO.new
20
- Howitzer::BaseGenerator.destination = Dir.mktmpdir
21
- Dir[File.join(generators_path, '**', '*_generator.rb')].each { |f| require f }
@@ -1,13 +0,0 @@
1
- module Howitzer
2
- module LoggerHelper
3
- def read_file(file)
4
- path = File.expand_path(file, __FILE__)
5
- IO.read(path)
6
- end
7
-
8
- def clear_file(file)
9
- path = File.expand_path(file, __FILE__)
10
- File.open(path, 'w') {}
11
- end
12
- end
13
- end
@@ -1,68 +0,0 @@
1
- require 'time'
2
- require 'json'
3
- require 'howitzer/exceptions'
4
-
5
- module Howitzer
6
- module MailgunApi
7
- class UnitClient
8
- attr_reader :url, :options, :block, :body, :code
9
-
10
- def initialize(url, options = {}, _backwards_compatibility = nil, &block)
11
- @url = url
12
- @block = block
13
- @options = options
14
- @body = nil
15
- @code = nil
16
- end
17
-
18
- def [](resource_path, &new_block)
19
- if block_given? then self.class.new(resource_path, options, &new_block)
20
- elsif block then self.class.new(resource_path, options, &block)
21
- else
22
- self.class.new(resource_path, options)
23
- end
24
- end
25
-
26
- def get(_options, _query_string = nil)
27
- Response.new(response_generator('bounces'))
28
- rescue StandardError => e
29
- raise Howitzer::CommunicationError.new(e), e.response
30
- end
31
-
32
- private
33
-
34
- def response_generator(resource_endpoint)
35
- case resource_endpoint
36
- when 'messages'
37
- t = Time.now
38
- id = "<#{t.to_i}.#{rand(99_999_999)}.5817@example.com>"
39
- @body = JSON.generate('message' => 'Queued. Thank you.', 'id' => id)
40
- when 'bounces'
41
- @body = JSON.generate(
42
- 'total_count' => 1,
43
- 'items' => {
44
- 'created_at' => 'Fri, 21 Oct 2011 11:02:55 GMT',
45
- 'code' => 550,
46
- 'address' => 'baz@example.com',
47
- 'error' => 'Message was not accepted -- invalid mailbox. Local mailbox baz@example.com is" +
48
- " unavailable: user not found'
49
- }
50
- )
51
- when 'lists'
52
- @body = JSON.generate(
53
- 'member' => {
54
- 'vars' => { 'age' => 26 },
55
- 'name' => 'Foo Bar',
56
- 'subscribed' => false,
57
- 'address' => 'bar@example.com'
58
- },
59
- 'message' => 'Mailing list member has been updated'
60
- )
61
- when 'campaigns'
62
- @body = JSON.generate('message' => 'Campaign has been deleted', 'id' => 'ABC123')
63
- end
64
- self
65
- end
66
- end
67
- end
68
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.shared_examples :capybara_context_holder do
4
- describe '#capybara_context' do
5
- let(:web_page_class) do
6
- klass = described_class
7
- Class.new do
8
- include klass
9
- end
10
- end
11
- subject { web_page_class.new.capybara_context }
12
- context 'when parent class has the method' do
13
- before do
14
- web_page_class.class_eval do
15
- def capybara_scopes
16
- @_scopes ||= [true]
17
- end
18
- end
19
- end
20
- it 'should execute parent method' do
21
- is_expected.to eq(true)
22
- end
23
- end
24
- context 'when parent class does not have the method' do
25
- it 'should raise error' do
26
- expect { subject }.to raise_error(
27
- NotImplementedError,
28
- "Please define 'capybara_scopes' method for class holder"
29
- )
30
- end
31
- end
32
- end
33
- end
@@ -1,94 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.shared_examples :capybara_methods_proxy do
4
- let(:session) { double(:session) }
5
- before do
6
- allow(Capybara).to receive(:current_session) { session }
7
- allow(Howitzer).to receive(:driver) { driver_name }
8
- allow(session).to receive(:current_url) { 'google.com' }
9
- end
10
-
11
- describe '#driver' do
12
- it 'should proxy #driver method' do
13
- expect(session).to receive(:driver).once
14
- reciever.driver
15
- end
16
- end
17
-
18
- describe '#text' do
19
- it 'should proxy #text method' do
20
- expect(session).to receive(:text).once
21
- reciever.text
22
- end
23
- end
24
-
25
- context 'when capybara session method' do
26
- it 'should proxy method' do
27
- expect(session).to receive(:visit).once
28
- reciever.visit
29
- end
30
- end
31
-
32
- context 'when capybara modal method' do
33
- it 'should proxy method' do
34
- expect(session).to receive(:dismiss_prompt).with(:some_text).once
35
- reciever.dismiss_prompt(:some_text)
36
- end
37
- end
38
-
39
- describe '#click_alert_box' do
40
- subject { reciever.click_alert_box(flag_value) }
41
- context 'when flag true and correct driver specified' do
42
- let(:flag_value) { true }
43
- let(:page) { double }
44
- let(:alert) { double }
45
- let(:driver) { double }
46
- let(:browser) { double }
47
- let(:switch_to) { double }
48
- let(:driver_name) { 'selenium' }
49
- it do
50
- expect(session).to receive(:driver).ordered.and_return(driver)
51
- expect(driver).to receive(:browser).ordered.and_return(browser)
52
- expect(browser).to receive(:switch_to).ordered.and_return(switch_to)
53
- expect(switch_to).to receive(:alert).ordered.and_return(alert)
54
- expect(alert).to receive(:accept).once
55
- subject
56
- end
57
- end
58
- context 'when flag false and correct driver specified' do
59
- let(:flag_value) { false }
60
- let(:page) { double }
61
- let(:alert) { double }
62
- let(:driver) { double }
63
- let(:browser) { double }
64
- let(:switch_to) { double }
65
- let(:driver_name) { 'selenium' }
66
- it do
67
- expect(session).to receive(:driver).ordered.and_return(driver)
68
- expect(driver).to receive(:browser).ordered.and_return(browser)
69
- expect(browser).to receive(:switch_to).ordered.and_return(switch_to)
70
- expect(switch_to).to receive(:alert).ordered.and_return(alert)
71
- expect(alert).to receive(:dismiss).once
72
- subject
73
- end
74
- end
75
- context 'when flag true and wrong driver specified' do
76
- let(:flag_value) { true }
77
- let(:page) { double }
78
- let(:driver_name) { 'ff' }
79
- it do
80
- expect(session).to receive(:evaluate_script).with('window.confirm = function() { return true; }')
81
- subject
82
- end
83
- end
84
- context 'when flag false and wrong driver specified' do
85
- let(:driver_name) { 'ff' }
86
- let(:flag_value) { false }
87
- let(:page) { double }
88
- it do
89
- expect(session).to receive(:evaluate_script).with('window.confirm = function() { return false; }')
90
- subject
91
- end
92
- end
93
- end
94
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
- RSpec.shared_examples :dynamic_section_methods do
3
- let(:web_page_object) { web_page_class.new }
4
-
5
- describe '#name_section' do
6
- let(:capybara_element) { double }
7
- subject { web_page_object.send("#{section_name}_section") }
8
- before { expect(session).to receive(:find).with(*finder_args).once.and_return(capybara_element) }
9
- it { is_expected.to be_a(section_class) }
10
- end
11
- describe '#name_sections' do
12
- subject { web_page_object.send("#{section_name}_sections") }
13
- let(:capybara_element1) { double }
14
- let(:capybara_element2) { double }
15
- before do
16
- expect(session).to receive(:all).with(*finder_args).once.and_return([capybara_element1, capybara_element2])
17
- end
18
- it 'should return collection of sections' do
19
- res = subject
20
- expect(res.size).to eq(2)
21
- expect(res.first).to be_a(section_class)
22
- expect(res.last).to be_a(section_class)
23
- end
24
- end
25
- describe '#has_name_section?' do
26
- subject { web_page_object.send("has_#{section_name}_section?") }
27
- before { expect(session).to receive(:has_selector?).with(*finder_args).once.and_return(true) }
28
- it { is_expected.to eq(true) }
29
- end
30
- describe '#has_no_name_element?' do
31
- subject { web_page_object.send("has_no_#{section_name}_section?") }
32
- before { expect(session).to receive(:has_no_selector?).with(*finder_args).once.and_return(true) }
33
- it { is_expected.to eq(true) }
34
- end
35
- end