ruby_raider 0.4.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -6
  3. data/README.md +5 -1
  4. data/Rakefile +2 -2
  5. data/lib/commands/scaffolding_commands.rb +2 -2
  6. data/lib/generators/automation_generator.rb +14 -10
  7. data/lib/generators/cucumber_generator.rb +10 -2
  8. data/lib/generators/menu_generator.rb +10 -6
  9. data/lib/generators/rspec_generator.rb +9 -1
  10. data/lib/generators/templates/automation/abstract_component.tt +2 -0
  11. data/lib/generators/templates/automation/abstract_page.tt +0 -1
  12. data/lib/generators/templates/automation/appium_settings.tt +5 -8
  13. data/lib/generators/templates/automation/component.tt +1 -1
  14. data/lib/generators/templates/automation/home_page.tt +9 -5
  15. data/lib/generators/templates/automation/login_page.tt +0 -2
  16. data/lib/generators/templates/automation/partials/android_settings.tt +8 -0
  17. data/lib/generators/templates/automation/partials/element.tt +3 -3
  18. data/lib/generators/templates/automation/partials/initialize_selector.tt +4 -0
  19. data/lib/generators/templates/automation/partials/ios_settings.tt +8 -0
  20. data/lib/generators/templates/automation/partials/selenium_login.tt +3 -3
  21. data/lib/generators/templates/automation/partials/watir_login.tt +3 -3
  22. data/lib/generators/templates/automation/pdp_page.tt +22 -0
  23. data/lib/generators/templates/cucumber/feature.tt +9 -0
  24. data/lib/generators/templates/cucumber/partials/appium_env.tt +7 -5
  25. data/lib/generators/templates/cucumber/partials/driver_world.tt +1 -0
  26. data/lib/generators/templates/cucumber/partials/mobile_steps.tt +8 -11
  27. data/lib/generators/templates/cucumber/partials/watir_world.tt +1 -0
  28. data/lib/generators/templates/cucumber/partials/web_steps.tt +1 -1
  29. data/lib/generators/templates/cucumber/world.tt +5 -0
  30. data/lib/generators/templates/helpers/driver_helper.tt +0 -1
  31. data/lib/generators/templates/helpers/partials/select_driver.tt +5 -4
  32. data/lib/generators/templates/rspec/spec.tt +8 -13
  33. data/ruby_raider.gemspec +2 -1
  34. data/spec/automation_generator_spec.rb +36 -154
  35. data/spec/common_generator_spec.rb +27 -112
  36. data/spec/cucumber_generator_spec.rb +15 -54
  37. data/spec/helpers_generator_spec.rb +57 -94
  38. data/spec/rspec_generator_spec.rb +13 -44
  39. data/spec/scaffolding_commands_spec.rb +162 -0
  40. data/spec/spec_helper.rb +20 -0
  41. metadata +23 -5
  42. data/lib/generators/templates/automation/confirmation_page.tt +0 -19
  43. data/lib/generators/templates/automation/partials/appium_login.tt +0 -28
  44. data/spec/scaffolding_spec.rb +0 -234
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 178109afc0345d78e1ec6fea0a281a55fc461cd4270f4b34117c49f9e4a91fa2
4
- data.tar.gz: b6087156268a4f75cf74f436753c36928bf9e01f3705d48a85d456e1828749ec
3
+ metadata.gz: 6a92cf556575579c0fd4b96bde582b6f19d0715224467dae8276a7b5a367d611
4
+ data.tar.gz: c4327f646e1f7dc87657da33e7cf2a075103fe605a953cb9e0a2c4f0a8bef24f
5
5
  SHA512:
6
- metadata.gz: 3ea7e978b7740cc986acf05336acb6e1036bb7f3c501a81d29ef9211a707c783b86c11116b153229dfa3ee709f0f2d38d1728c13591603813f7c1f188bdb9a05
7
- data.tar.gz: 7ad15bf0087f8d6d208b46118175d493afeeedd4d6855546d19ad752a596d5d09020c7bae8c58f360df671e10738f9c3814027fbf3d8415d1f80cc435dc058ae
6
+ metadata.gz: cd2a91f76d5f338b7cd2e79ae0c3af2012a4ff4a46802c3f90b8d1e79724c30fb9127790a89ceac5592ac74e039863993f62c7205e732fa714b3a3ae4309c4e3
7
+ data.tar.gz: d61169f5255b2f0e12a9cd62cb312c81dabc696ad9285d0863c62d46cdaaa4e9cea152e68985ff063450fc0c9c5d55cf752f5d06ae4cf245647c0ce924906ec9
data/.rubocop.yml CHANGED
@@ -1,8 +1,5 @@
1
- require: rubocop-rspec
2
-
3
- AllCops:
4
- Exclude:
5
- - './spec/*'
1
+ require:
2
+ - rubocop-rspec
6
3
 
7
4
  # Layout
8
5
  Layout/CaseIndentation:
@@ -86,7 +83,7 @@ Style/HashTransformValues:
86
83
 
87
84
  Style/SafeNavigation:
88
85
  Description: "Use &. instead of checking if an object exists"
89
- Enabled: false
86
+ Enabled: true
90
87
 
91
88
  Style/SingleLineBlockParams:
92
89
  Description: 'Enforces the names of some block params.'
data/README.md CHANGED
@@ -43,7 +43,11 @@ Ruby Raider is a generator and scaffolding gem to make UI test automation easier
43
43
 
44
44
  * Generating a framework with Cucumber and Appium for IOS
45
45
 
46
- ***In order to run the Appium tests, download the example [app](https://github.com/cloudgrey-io/the-app/releases/tag/v1.10.0).***
46
+ * Generating a framework with Rspec and Appium for Android
47
+
48
+ * Generating a framework with Cucumber and Appium for Android
49
+
50
+ ***In order to run the Appium tests, download the example [app](https://github.com/saucelabs/my-demo-app-rn).***
47
51
 
48
52
  This works in all the platforms (Tested on Mac OS, Linux and Windows).
49
53
 
data/Rakefile CHANGED
@@ -4,8 +4,8 @@ require_relative 'lib/ruby_raider'
4
4
  require_relative 'lib/commands/scaffolding_commands'
5
5
 
6
6
  desc 'Creates a new test project'
7
- task :new do
8
- RubyRaider.start
7
+ task :new, [:name] do |_t, args|
8
+ system "bin/raider -n #{args.name}"
9
9
  end
10
10
 
11
11
  desc 'Creates a page'
@@ -86,7 +86,7 @@ class ScaffoldingCommands < UtilityCommands
86
86
  def scaffold(name)
87
87
  if Pathname.new('spec').exist? && !Pathname.new('features').exist?
88
88
  Scaffolding.new([name, load_config_path('spec')]).generate_spec
89
- elsif Pathname.new('features').exist?
89
+ else
90
90
  Scaffolding.new([name, load_config_path('feature')]).generate_feature
91
91
  end
92
92
  Scaffolding.new([name, load_config_path('page')]).generate_class
@@ -110,7 +110,7 @@ class ScaffoldingCommands < UtilityCommands
110
110
 
111
111
  no_commands do
112
112
  def load_config_path(type)
113
- YAML.load_file('config/config.yml')["#{type}_path"] if YAML.load_file('config/config.yml')
113
+ YAML.load_file('config/config.yml')["#{type}_path"] if Pathname.new('config/config.yml').exist?
114
114
  end
115
115
  end
116
116
  end
@@ -4,6 +4,8 @@ require_relative 'generator'
4
4
 
5
5
  class AutomationGenerator < Generator
6
6
  def generate_login_page
7
+ return unless (@_initializer.first & %w[android ios]).empty?
8
+
7
9
  template('automation/login_page.tt', "#{name}/page_objects/pages/login_page.rb")
8
10
  end
9
11
 
@@ -12,30 +14,32 @@ class AutomationGenerator < Generator
12
14
  end
13
15
 
14
16
  def generate_home_page
15
- return unless @_initializer.first.include?('appium_ios')
17
+ return if (@_initializer.first & %w[android ios]).empty?
16
18
 
17
19
  template('automation/home_page.tt', "#{name}/page_objects/pages/home_page.rb")
18
20
  end
19
21
 
22
+ def generate_pdp_page
23
+ return if (@_initializer.first & %w[android ios]).empty?
24
+
25
+ template('automation/pdp_page.tt', "#{name}/page_objects/pages/pdp_page.rb")
26
+ end
27
+
20
28
  def generate_header_component
21
- return if @_initializer.first.include?('appium_ios')
29
+ return unless (@_initializer.first & %w[android ios]).empty?
22
30
 
23
31
  template('automation/component.tt', "#{name}/page_objects/components/header_component.rb")
24
32
  end
25
33
 
26
34
  def generate_abstract_component
27
- return if @_initializer.first.include?('appium_ios')
35
+ return unless (@_initializer.first & %w[android ios]).empty?
28
36
 
29
37
  template('automation/abstract_component.tt', "#{name}/page_objects/abstract/abstract_component.rb")
30
38
  end
31
39
 
32
- def generate_confirmation_page
33
- return unless @_initializer.first.include?('appium_ios')
34
-
35
- template('automation/confirmation_page.tt', "#{name}/page_objects/pages/confirmation_page.rb")
36
- end
37
-
38
40
  def generate_appium_settings
39
- template('automation/appium_settings.tt', "#{name}/appium.txt") if @_initializer.first.include?('appium_ios')
41
+ return if (@_initializer.first & %w[android ios]).empty?
42
+
43
+ template('automation/appium_settings.tt', "#{name}/appium.txt")
40
44
  end
41
45
  end
@@ -4,14 +4,22 @@ require_relative 'generator'
4
4
 
5
5
  class CucumberGenerator < Generator
6
6
  def generate_feature
7
- template('cucumber/feature.tt', "#{name}/features/login.feature")
7
+ template('cucumber/feature.tt', "#{name}/features/#{template_name}.feature")
8
8
  end
9
9
 
10
10
  def generate_steps
11
- template('cucumber/steps.tt', "#{name}/features/step_definitions/login_steps.rb")
11
+ template('cucumber/steps.tt', "#{name}/features/step_definitions/#{template_name}_steps.rb")
12
12
  end
13
13
 
14
14
  def generate_env_file
15
15
  template('cucumber/env.tt', "#{name}/features/support/env.rb")
16
16
  end
17
+
18
+ def generate_world
19
+ template('cucumber/world.tt', "#{name}/world.rb")
20
+ end
21
+
22
+ def template_name
23
+ @template_name ||= (@_initializer.first & %w[android ios]).empty? ? 'login' : 'home'
24
+ end
17
25
  end
@@ -31,21 +31,25 @@ class MenuGenerator
31
31
  select_test_framework(automation)
32
32
  end
33
33
 
34
- def set_framework(automation, framework)
35
- add_generator framework.capitalize
36
- generators.each { |generator| invoke_generator(automation, framework, generator) }
34
+ def set_up_framework(automation, framework)
35
+ generate_framework(automation, framework)
37
36
  system "cd #{name} && gem install bundler && bundle install"
38
37
  end
39
38
 
40
39
  def choose_mobile_platform
41
40
  prompt.select('Please select your mobile platform') do |menu|
42
- menu.choice :iOS, -> { choose_test_framework 'appium_ios' }
43
- menu.choice :Android, -> { error_handling('Android') }
41
+ menu.choice :iOS, -> { choose_test_framework 'ios' }
42
+ menu.choice :Android, -> { choose_test_framework 'android' }
44
43
  menu.choice :Cross_Platform, -> { error_handling('Cross Platform') }
45
44
  menu.choice :Quit, -> { exit }
46
45
  end
47
46
  end
48
47
 
48
+ def generate_framework(automation, framework)
49
+ add_generator framework.capitalize
50
+ generators.each { |generator| invoke_generator(automation, framework, generator) }
51
+ end
52
+
49
53
  protected
50
54
 
51
55
  def add_generator(*opts)
@@ -55,7 +59,7 @@ class MenuGenerator
55
59
  private
56
60
 
57
61
  def framework_choice(framework, automation_type)
58
- set_framework(automation_type, framework.downcase)
62
+ set_up_framework(automation_type, framework.downcase)
59
63
  prompt.say("You have chosen to use #{framework} with #{automation_type}")
60
64
  end
61
65
 
@@ -3,10 +3,18 @@
3
3
  require_relative 'generator'
4
4
 
5
5
  class RspecGenerator < Generator
6
- def generate_spec
6
+ def generate_login_spec
7
+ return unless (@_initializer.first & %w[android ios]).empty?
8
+
7
9
  template('rspec/spec.tt', "#{name}/spec/login_page_spec.rb")
8
10
  end
9
11
 
12
+ def generate_pdp_spec
13
+ return if (@_initializer.first & %w[android ios]).empty?
14
+
15
+ template('rspec/spec.tt', "#{name}/spec/pdp_page_spec.rb")
16
+ end
17
+
10
18
  def generate_base_spec
11
19
  template('rspec/base_spec.tt', "#{name}/spec/base_spec.rb")
12
20
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AbstractComponent
4
+ attr_reader :component
5
+
4
6
  def initialize(component)
5
7
  @component = component
6
8
  end
@@ -1,4 +1,3 @@
1
- require 'yaml'
2
1
  <%= ERB.new(File.read(File.expand_path('./partials/require_raider.tt', __dir__)), nil, '-').result(binding) -%>
3
2
 
4
3
  class AbstractPage
@@ -1,8 +1,5 @@
1
- [caps]
2
- platformName = "iOS"
3
- platformVersion = "15.5"
4
- deviceName = "iPhone SE (3rd generation)"
5
- app = "TheApp.app"
6
-
7
- [appium_lib]
8
- server_url = "http://127.0.0.1:4723/wd/hub"
1
+ <% if automation == 'ios' %>
2
+ <%= ERB.new(File.read(File.expand_path('./partials/ios_settings.tt', __dir__))).result(binding) -%>
3
+ <% else %>
4
+ <%= ERB.new(File.read(File.expand_path('./partials/android_settings.tt', __dir__))).result(binding) -%>
5
+ <% end %>
@@ -4,6 +4,6 @@ require_relative '../abstract/abstract_component'
4
4
 
5
5
  class HeaderComponent < AbstractComponent
6
6
  def customer_name
7
- @component.text
7
+ component.text
8
8
  end
9
9
  end
@@ -4,17 +4,21 @@ require_relative '../abstract/abstract_page'
4
4
 
5
5
  class HomePage < AbstractPage
6
6
 
7
- #Actions
7
+ # Actions
8
8
 
9
- def go_to_login
10
- @driver.wait { login_button_navigator }.click
9
+ def go_to_backpack_pdp
10
+ driver.wait { backpack_image }.click
11
11
  end
12
12
 
13
13
  private
14
14
 
15
15
  # Elements
16
16
 
17
- def login_button_navigator
18
- @driver.find_element(accessibility_id: 'Login Screen')
17
+ def backpack_image
18
+ <% if automation == 'ios' %>
19
+ driver.find_element(predicate: 'label == "Sauce Labs Backpack"')
20
+ <% else %>
21
+ driver.find_element(xpath: '(//android.view.ViewGroup[@content-desc="store item"])[1]/android.view.ViewGroup[1]')
22
+ <% end %>
19
23
  end
20
24
  end
@@ -3,6 +3,4 @@
3
3
  <%= ERB.new(File.read(File.expand_path('./partials/selenium_login.tt', __dir__))).result(binding) %>
4
4
  <% when 'watir' -%>
5
5
  <%= ERB.new(File.read(File.expand_path('./partials/watir_login.tt', __dir__))).result(binding) %>
6
- <% else -%>
7
- <%= ERB.new(File.read(File.expand_path('./partials/appium_login.tt', __dir__))).result(binding) %>
8
6
  <% end -%>
@@ -0,0 +1,8 @@
1
+ [caps]
2
+ automationName = "UiAutomator2"
3
+ platformName = "Android"
4
+ deviceName = "Nexus_7_API_33"
5
+ app = "Android-MyDemoAppRN.1.3.0.build-244.apk"
6
+
7
+ [appium_lib]
8
+ server_url = "http://127.0.0.1:4723/wd/hub"
@@ -1,5 +1,5 @@
1
- <% if %w[selenium appium_ios].include?(automation) -%>
2
- @driver.find_element
1
+ <% if %w[selenium appium_ios appium_android].include?(automation) -%>
2
+ driver.find_element
3
3
  <% else -%>
4
- @browser.element
4
+ browser.element
5
5
  <% end -%>
@@ -1,8 +1,12 @@
1
1
  <% if automation == 'watir' %>
2
+ attr_reader :browser
3
+
2
4
  def initialize(browser)
3
5
  @browser = browser
4
6
  end
5
7
  <% else %>
8
+ attr_reader :driver
9
+
6
10
  def initialize(driver)
7
11
  @driver = driver
8
12
  end
@@ -0,0 +1,8 @@
1
+ [caps]
2
+ platformName = "iOS"
3
+ platformVersion = "16.0"
4
+ deviceName = "iPhone SE (3rd generation)"
5
+ app = "MyRNDemoApp.app"
6
+
7
+ [appium_lib]
8
+ server_url = "http://127.0.0.1:4723/wd/hub"
@@ -27,14 +27,14 @@ class LoginPage < AbstractPage
27
27
  # Elements
28
28
 
29
29
  def username_field
30
- @driver.find_element(id: 'loginFrm_loginname')
30
+ driver.find_element(id: 'loginFrm_loginname')
31
31
  end
32
32
 
33
33
  def password_field
34
- @driver.find_element(id: 'loginFrm_password')
34
+ driver.find_element(id: 'loginFrm_password')
35
35
  end
36
36
 
37
37
  def login_button
38
- @driver.find_element(xpath: "//button[@title='Login']")
38
+ driver.find_element(xpath: "//button[@title='Login']")
39
39
  end
40
40
  end
@@ -26,14 +26,14 @@ class LoginPage < AbstractPage
26
26
  # Elements
27
27
 
28
28
  def username_field
29
- @browser.text_field(id: 'loginFrm_loginname')
29
+ browser.text_field(id: 'loginFrm_loginname')
30
30
  end
31
31
 
32
32
  def password_field
33
- @browser.text_field(id: 'loginFrm_password')
33
+ browser.text_field(id: 'loginFrm_password')
34
34
  end
35
35
 
36
36
  def login_button
37
- @browser.button(xpath: "//button[@title='Login']")
37
+ browser.button(xpath: "//button[@title='Login']")
38
38
  end
39
39
  end
@@ -0,0 +1,22 @@
1
+ require_relative '../abstract/abstract_page'
2
+
3
+ class PdpPage < AbstractPage
4
+
5
+ # Actions
6
+
7
+ def add_to_cart_text
8
+ driver.wait { add_to_cart_button }.text
9
+ end
10
+
11
+ private
12
+
13
+ # Elements
14
+
15
+ def add_to_cart_button
16
+ <% if automation == 'ios' %>
17
+ driver.find_element(accessibility_id: 'Add To Cart button')
18
+ <% else %>
19
+ driver.find_element(xpath: '//android.view.ViewGroup[@content-desc="Add To Cart button"]/android.widget.TextView')
20
+ <% end %>
21
+ end
22
+ end
@@ -1,6 +1,15 @@
1
+ <% if %w[selenium watir].include? automation -%>
1
2
  Feature: Login Page
2
3
 
3
4
  Scenario: A user can login
4
5
  Given I'm a registered user on the login page
5
6
  When I login with my credentials
6
7
  Then I can see the main page
8
+ <% else -%>
9
+ Feature: Home Page
10
+
11
+ Scenario: A user can go to the product details page
12
+ Given I'm an anonymous user on the home page
13
+ When I select one of the products
14
+ Then I'm redirected to the product details page
15
+ <% end %>
@@ -1,13 +1,15 @@
1
1
  require_relative '../../helpers/driver_helper'
2
2
 
3
+ include Raider::DriverHelper
4
+
3
5
  Before do
4
6
  Raider::AllureHelper.configure
5
- @driver = Raider::DriverHelper.new_driver
6
- @driver.start_driver
7
+ new_driver
8
+ driver.start_driver
7
9
  end
8
10
 
9
11
  After do |scenario|
10
- @driver.screenshot("allure-results/screenshots/#{scenario.name}.png")
12
+ driver.screenshot("allure-results/screenshots/#{scenario.name}.png")
11
13
  Raider::AllureHelper.add_screenshot(scenario.name)
12
- @driver.quit_driver
13
- end
14
+ driver.quit_driver
15
+ end
@@ -0,0 +1 @@
1
+ World(DriverHelper)
@@ -1,20 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../page_objects/pages/confirmation_page'
4
3
  require_relative '../../page_objects/pages/home_page'
5
- require_relative '../../page_objects/pages/login_page'
4
+ require_relative '../../page_objects/pages/pdp_page'
6
5
 
7
- Given("I'm a registered user on the login page") do
8
- home_page = HomePage.new(@driver)
9
- home_page.go_to_login
6
+ Given("I'm an anonymous user on the home page") do
7
+ @home_page = HomePage.new(driver)
10
8
  end
11
9
 
12
- When('I login with my credentials') do
13
- login_page = LoginPage.new(@driver)
14
- login_page.login('alice', 'mypassword')
10
+ When('I select one of the products') do
11
+ @home_page.go_to_backpack_pdp
15
12
  end
16
13
 
17
- When('I can see the main page') do
18
- confirmation_page = ConfirmationPage.new(@driver)
19
- expect(confirmation_page.login_message).to eq 'You are logged in as alice'
14
+ When("I'm redirected to the product details page") do
15
+ pdp_page = PdpPage.new(driver)
16
+ expect(pdp_page.add_to_cart_text).to eq 'Add To Cart'
20
17
  end
@@ -0,0 +1 @@
1
+ World(BrowserHelper)
@@ -3,7 +3,7 @@
3
3
  require_relative '../../page_objects/pages/login_page'
4
4
 
5
5
  Given("I'm a registered user on the login page") do
6
- @login_page = LoginPage.new(<% if automation == 'watir'%>@browser<% else %>@driver<% end %>)
6
+ @login_page = LoginPage.new(<% if automation == 'watir'%>browser<% else %>driver<% end %>)
7
7
  @login_page.visit
8
8
  end
9
9
 
@@ -0,0 +1,5 @@
1
+ <% if %w[watir].include? automation -%>
2
+ <%= ERB.new(File.read(File.expand_path('./partials/watir_world.tt', __dir__))).result(binding).strip! -%>
3
+ <% else -%>
4
+ <%= ERB.new(File.read(File.expand_path('./partials/driver_world.tt', __dir__))).result(binding).strip! -%>
5
+ <% end -%>
@@ -6,7 +6,6 @@ require 'webdrivers'
6
6
  <% else -%>
7
7
  require 'appium_lib'
8
8
  <% end -%>
9
- require_relative 'driver_helper'
10
9
 
11
10
  module Raider
12
11
  module DriverHelper
@@ -1,8 +1,9 @@
1
- <% if automation == 'watir' %>
1
+ <% case automation
2
+ when 'selenium' %>
3
+ new_driver
4
+ <% when 'watir' %>
2
5
  new_browser
3
6
  <% else %>
4
7
  new_driver
5
- <% end %>
6
- <% if %w[appium_ios].include? automation %>
7
- start_driver
8
+ driver.start_driver
8
9
  <% end %>
@@ -29,24 +29,19 @@ describe 'Login' do
29
29
  end
30
30
  end
31
31
  <% else -%>
32
- require_relative '../page_objects/pages/confirmation_page'
33
32
  require_relative '../page_objects/pages/home_page'
34
33
  require_relative 'base_spec'
35
- require_relative '../page_objects/pages/login_page'
34
+ require_relative '../page_objects/pages/pdp_page'
36
35
 
37
- class LoginSpec < BaseSpec
38
- describe 'Login' do
36
+ class PdpSpec < BaseSpec
37
+ describe 'PDP page' do
39
38
 
40
- let(:user_name) { 'alice' }
41
- let(:password) { 'mypassword' }
42
- let(:login_page) { LoginPage.new(@driver) }
43
- let(:home_page) { HomePage.new(@driver) }
44
- let(:confirmation_page) { ConfirmationPage.new(@driver) }
39
+ let(:home_page) { HomePage.new(driver) }
40
+ let(:pdp_page) { PdpPage.new(driver) }
45
41
 
46
- it 'can login' do
47
- home_page.go_to_login
48
- login_page.login(user_name, password)
49
- expect(confirmation_page.login_message).to eq 'You are logged in as alice'
42
+ it 'shows add to cart button' do
43
+ home_page.go_to_backpack_pdp
44
+ expect(pdp_page.add_to_cart_text).to eq 'Add To Cart'
50
45
  end
51
46
  end
52
47
  end
data/ruby_raider.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ruby_raider'
5
- s.version = '0.4.0'
5
+ s.version = '0.4.2'
6
6
  s.summary = 'A gem to make setup and start of UI automation projects easier'
7
7
  s.description = 'This gem has everything you need to start working with test automation'
8
8
  s.authors = ['Agustin Pequeno']
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_development_dependency 'reek', '~> 6.1.0'
18
18
  s.add_development_dependency 'rspec', '~> 3.11.0'
19
19
  s.add_development_dependency 'rubocop', '~> 1.27'
20
+ s.add_development_dependency 'rubocop-performance', '~> 1.15.0'
20
21
  s.add_development_dependency 'rubocop-rspec', '~> 2.9.0'
21
22
 
22
23
  s.add_runtime_dependency 'thor', '~> 1.2.1'