bddfire 1.9.7 → 1.9.8
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 +5 -13
- data/Gemfile +1 -2
- data/README.markdown +68 -37
- data/Rakefile +4 -4
- data/bddfire.gemspec +19 -16
- data/bin/bddfire +116 -106
- data/features/step_definitions/all_steps.rb +1 -4
- data/features/support/env.rb +4 -4
- data/lib/bddfire/accesibility/axe.rb +40 -0
- data/lib/bddfire/assertions/assert.rb +2 -2
- data/lib/bddfire/page-objects/HomePage.rb +7 -9
- data/lib/bddfire/require.rb +5 -4
- data/lib/bddfire/version.rb +1 -1
- data/lib/bddfire/web/browser_actions.rb +1 -1
- data/lib/bddfire/web/headless_steps.rb +9 -10
- data/lib/bddfire/web/web_methods.rb +4 -5
- data/lib/bddfire/web/web_steps.rb +3 -3
- data/lib/bddfire.rb +1 -3
- data/pre-defined-steps/accessibility_steps.md +24 -0
- data/pre-defined-steps/capybara_steps.md +1 -1
- data/scaffold/accessibility/features/01_validation.feature +6 -0
- data/scaffold/accessibility/features/02_javascript.feature +6 -0
- data/scaffold/accessibility/features/03_language.feature +9 -0
- data/scaffold/accessibility/features/04_page_titles.feature +7 -0
- data/scaffold/accessibility/features/05_main_landmark.feature +7 -0
- data/scaffold/accessibility/features/06_headings.feature +7 -0
- data/scaffold/accessibility/features/07_minimum_resizable_text.feature +8 -0
- data/scaffold/accessibility/features/08_tabindex.feature +6 -0
- data/scaffold/accessibility/features/09_focusable_controls.feature +9 -0
- data/scaffold/accessibility/features/10_color_contrast.feature +10 -0
- data/scaffold/accessibility/features/11_image.feature +10 -0
- data/scaffold/accessibility/features/12_form.feature +11 -0
- data/scaffold/accessibility/features/13_table.feature +10 -0
- data/scaffold/accessibility/features/general_accessibility_check.feature +9 -0
- data/scaffold/accessibility/features/step_definitions/base.rb +22 -0
- data/scaffold/accessibility/features/step_definitions/form.rb +0 -0
- data/scaffold/accessibility/features/step_definitions/headings.rb +7 -0
- data/scaffold/accessibility/features/step_definitions/image.rb +0 -0
- data/scaffold/accessibility/features/step_definitions/javascript.rb +3 -0
- data/scaffold/accessibility/features/step_definitions/language.rb +0 -0
- data/scaffold/accessibility/features/step_definitions/main_landmark.rb +15 -0
- data/scaffold/accessibility/features/step_definitions/minimum_resizable_text.rb +11 -0
- data/scaffold/accessibility/features/step_definitions/page_title.rb +10 -0
- data/scaffold/accessibility/features/step_definitions/tabindex.rb +3 -0
- data/scaffold/accessibility/features/step_definitions/table.rb +0 -0
- data/scaffold/accessibility/features/step_definitions/validation.rb +4 -0
- data/scaffold/accessibility/features/support/capybara.rb +42 -0
- data/scaffold/config_files/.rubocop.yml +5 -5
- data/scaffold/config_files/Dockerfile +24 -0
- data/scaffold/config_files/Gemfile +9 -5
- data/scaffold/config_files/Rakefile +36 -32
- data/scaffold/config_files/docker.sh +82 -0
- data/scaffold/features/pages/HomePage.rb +10 -10
- data/scaffold/features/support/env.rb +128 -130
- data/scaffold/features/support/hooks.rb +5 -6
- data/scaffold/load/Dockerfile +28 -0
- data/scaffold/load/README.md +31 -0
- data/scaffold/load/conf/application.conf +7 -0
- data/scaffold/load/conf/gatling.conf +157 -0
- data/scaffold/load/conf/logback.xml +22 -0
- data/scaffold/load/conf/recorder.conf +51 -0
- data/scaffold/load/docker-jenkins.sh +77 -0
- data/scaffold/load/gatling_jenkins.sh +28 -0
- data/scaffold/load/gatling_local.sh +29 -0
- data/scaffold/load/user-files/bodies/.keep +0 -0
- data/scaffold/load/user-files/data/search.csv +2 -0
- data/scaffold/load/user-files/simulations/SampleLoadTEST.scala +22 -0
- data/scaffold/rake_tasks/cucumber.rb +2 -3
- data/scaffold/rake_tasks/cuke_sniffer.rb +3 -3
- data/scaffold/rake_tasks/rspec.rb +3 -4
- data/scaffold/rake_tasks/rubocop.rb +4 -5
- data/scaffold/rake_tasks/yard.rb +3 -4
- metadata +142 -55
- data/scaffold/config_files/.ruby-version +0 -1
- data/scaffold/config_files/.travis.yml +0 -16
- data/scaffold/features/pages/Abstract.rb +0 -14
- data/scaffold/features/support/helpers.erb +0 -6
- data/scaffold/features/support/responsive.rb +0 -19
- data/scaffold/lib/project/version.erb +0 -3
- data/scaffold/lib/project.erb +0 -2
- data/scaffold/spec/spec_helper.rb +0 -8
@@ -3,20 +3,18 @@ class HomePage
|
|
3
3
|
attr_accessor :title, :title_text
|
4
4
|
end
|
5
5
|
|
6
|
-
self.title_text =
|
7
|
-
self.title =
|
6
|
+
self.title_text = 'Your Site '
|
7
|
+
self.title = 'your_css_selector'
|
8
8
|
|
9
|
-
def initialize(
|
9
|
+
def initialize(_session)
|
10
10
|
@session = Capybara.current_session
|
11
11
|
end
|
12
12
|
|
13
13
|
def visit_home_page
|
14
|
-
@session.visit(
|
14
|
+
@session.visit('your_url')
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
@home_page
|
21
|
-
@home_page.visit_home_page
|
22
|
-
=end
|
18
|
+
# You can the use these methods in the step_definitions as
|
19
|
+
# @home_page = HomePage.new(Capybara.current_session)
|
20
|
+
# @home_page.visit_home_page
|
data/lib/bddfire/require.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
Dir[File.dirname(__FILE__) + '/web/*.rb'].each {|file| require file }
|
2
|
-
Dir[File.dirname(__FILE__) + '/mobile/*.rb'].each {|file| require file }
|
3
|
-
Dir[File.dirname(__FILE__) + '/assertions/*.rb'].each {|file| require file }
|
4
|
-
Dir[File.dirname(__FILE__) + '/page-objects/*.rb'].each {|file| require file }
|
1
|
+
Dir[File.dirname(__FILE__) + '/web/*.rb'].each { |file| require file }
|
2
|
+
Dir[File.dirname(__FILE__) + '/mobile/*.rb'].each { |file| require file }
|
3
|
+
Dir[File.dirname(__FILE__) + '/assertions/*.rb'].each { |file| require file }
|
4
|
+
Dir[File.dirname(__FILE__) + '/page-objects/*.rb'].each { |file| require file }
|
5
|
+
Dir[File.dirname(__FILE__) + '/accessibility/*.rb'].each { |file| require file }
|
data/lib/bddfire/version.rb
CHANGED
@@ -10,21 +10,21 @@ Then(/^response headers should contain "(.*?)"$/) do |expected_header|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
Then(/^page source should contain "(.*?)"$/) do |data|
|
13
|
-
|
14
|
-
|
13
|
+
source = page.driver.source
|
14
|
+
expect(source).to include(data)
|
15
15
|
end
|
16
16
|
|
17
17
|
When(/^I clear network traffic$/) do
|
18
|
-
|
18
|
+
page.driver.clear_network_traffic
|
19
19
|
end
|
20
20
|
|
21
21
|
When(/^I called network traffic of the page$/) do
|
22
22
|
page.driver.network_traffic.each do |request|
|
23
|
-
|
24
|
-
|
23
|
+
request.response_parts.uniq(&:url).each do |response|
|
24
|
+
puts "\n Responce URL #{response.url}: \n Status #{response.status}"
|
25
|
+
end
|
25
26
|
end
|
26
27
|
end
|
27
|
-
end
|
28
28
|
|
29
29
|
Then(/^network traffic should contains resource "(.*?)"$/) do |resource|
|
30
30
|
traffic = page.driver.network_traffic
|
@@ -35,7 +35,7 @@ When(/^I request response headers$/) do
|
|
35
35
|
puts page.response_headers.to_a
|
36
36
|
end
|
37
37
|
|
38
|
-
When(/^I request page "(.*?)" with header name "(.*?)" value "(.*?)"$/) do |url,
|
38
|
+
When(/^I request page "(.*?)" with header name "(.*?)" value "(.*?)"$/) do |url, _name, _value|
|
39
39
|
page.driver.headers = { '#{name}' => '#{value}' }
|
40
40
|
visit(url)
|
41
41
|
end
|
@@ -44,13 +44,12 @@ When(/^I set the cookie name "(.*?)" with value "(.*?)"$/) do |name, value|
|
|
44
44
|
page.driver.set_cookie(name, value)
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
47
|
Then(/^I should see the cookie "(.*?)"$/) do |cookie|
|
49
48
|
cookies = page.driver.cookies
|
50
49
|
expect(cookies).to include(cookie)
|
51
50
|
end
|
52
51
|
|
53
|
-
When(/^I removed cookie "(.*?)"$/) do |
|
52
|
+
When(/^I removed cookie "(.*?)"$/) do |_arg1|
|
54
53
|
page.driver.remove_cookie
|
55
54
|
end
|
56
55
|
|
@@ -59,6 +58,6 @@ When(/^I clear all cookies$/) do
|
|
59
58
|
end
|
60
59
|
|
61
60
|
When(/^I visit page with base authorization user "(.*?)" and password "(.*?)"$/) do |user, password|
|
62
|
-
#page.driver.headers = {'Authorization': 'Basic '+ Base64.encode64('username:password')};
|
61
|
+
# page.driver.headers = {'Authorization': 'Basic '+ Base64.encode64('username:password')};
|
63
62
|
page.driver.basic_authorize(user, password)
|
64
63
|
end
|
@@ -1,18 +1,17 @@
|
|
1
1
|
require 'net/https'
|
2
2
|
|
3
|
-
|
4
|
-
def check_valid_locator_type? type
|
3
|
+
def check_valid_locator_type?(type)
|
5
4
|
%w(id class css name xpath).include? type
|
6
5
|
end
|
7
6
|
|
8
|
-
def check_selector
|
7
|
+
def check_selector(type)
|
9
8
|
raise "Please use correct locator only id,name,css,xpath are supported - #{type}" unless check_valid_locator_type? type
|
10
9
|
end
|
11
10
|
|
12
|
-
def check_valid_option_by?
|
11
|
+
def check_valid_option_by?(option_by)
|
13
12
|
%w(text value index).include? option_by
|
14
13
|
end
|
15
14
|
|
16
|
-
def validate_option_by
|
15
|
+
def validate_option_by(option_by)
|
17
16
|
raise "Please select valid option, invalid option - #{option_by}" unless check_valid_option_by? option_by
|
18
17
|
end
|
@@ -11,11 +11,11 @@ Then(/^I should see "(.*?)"$/) do |text|
|
|
11
11
|
page.should have_content text
|
12
12
|
end
|
13
13
|
|
14
|
-
When(/^I fill "(.*?)" into field with (.+) "(.*?)"$/) do |data,
|
14
|
+
When(/^I fill "(.*?)" into field with (.+) "(.*?)"$/) do |data, _type, locator|
|
15
15
|
fill_in locator, with: data
|
16
16
|
end
|
17
17
|
|
18
|
-
When(/^I select the "(.*?)" link$/)
|
18
|
+
When(/^I select the "(.*?)" link$/) do |link|
|
19
19
|
click_link(link)
|
20
20
|
end
|
21
21
|
|
@@ -40,7 +40,7 @@ When(/^I choose radio button"(.*?)"$/) do |radiobutton|
|
|
40
40
|
end
|
41
41
|
|
42
42
|
When(/^I select option "(.*?)" from the dropdown "(.*?)"$/) do |option, dropdown|
|
43
|
-
select(option, :
|
43
|
+
select(option, from: dropdown)
|
44
44
|
end
|
45
45
|
|
46
46
|
When(/^I attach the file "(.*?)" to the field "(.*?)"$/) do |file, locator|
|
data/lib/bddfire.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Accessibility Steps
|
2
|
+
|
3
|
+
|
4
|
+
Then page should have title html attribute with meaningful text
|
5
|
+
Then there should be one instance of role=main as an attribute of an HTML element
|
6
|
+
Then There must be no instances of attributes with positive or zero values
|
7
|
+
Then the page should have exactly one h1 heading and heading order must follow
|
8
|
+
|
9
|
+
|
10
|
+
## Axe Steps
|
11
|
+
|
12
|
+
You can still use all the steps from Axe Matcher
|
13
|
+
|
14
|
+
Then the page should be accessible
|
15
|
+
Then the page should be accessible within "#selector"
|
16
|
+
Then the page should be accessible excluding "#selector"
|
17
|
+
Then the page should be accessible within "main"; excluding "aside"
|
18
|
+
Then the page should be accessible within "main" but excluding "aside"
|
19
|
+
Then the page should be accessible according to: tag-name
|
20
|
+
Then the page should be accessible within "#header"; according to: best-practice
|
21
|
+
Then the page should be accessible according to: wcag2a; checking: color-contrast
|
22
|
+
Then the page should be accessible according to: wcag2a and checking: color-contrast
|
23
|
+
Then the page should be accessible according to: wcag2a; skipping: accesskeys
|
24
|
+
Then the page should be accessible according to: wcag2a but skipping: accesskeys
|
@@ -0,0 +1,9 @@
|
|
1
|
+
@language
|
2
|
+
Feature: Specify content language
|
3
|
+
|
4
|
+
Scenario Outline: Check for other elements with lang attributes
|
5
|
+
Given I am on the page
|
6
|
+
Then page should have all relevant "<attributes>" for the accessibility guideline
|
7
|
+
Examples:
|
8
|
+
|attributes|
|
9
|
+
|html-lang |
|
@@ -0,0 +1,8 @@
|
|
1
|
+
@resize
|
2
|
+
Feature: Minimum and Re-sizable text size
|
3
|
+
|
4
|
+
Scenario: Text size is readable
|
5
|
+
Given I am on the page
|
6
|
+
Then Text must be styled with units that are resizable in all browsers.
|
7
|
+
And Content must be visible and usable with text resized to 200% of normal.
|
8
|
+
And Content must be visible and usable with page zoomed to 200% of normal.
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@color_contrast
|
2
|
+
Feature: Color Contrast
|
3
|
+
|
4
|
+
Scenario Outline: Page should have valid color combinations according to BBC accessibility standards
|
5
|
+
Given I am on the page
|
6
|
+
Then page should have all relevant "<attributes>" for the accessibility guideline
|
7
|
+
Examples:
|
8
|
+
| attributes |
|
9
|
+
| accesskeys |
|
10
|
+
| color-contrast |
|
@@ -0,0 +1,11 @@
|
|
1
|
+
@forms
|
2
|
+
Feature: Form on the page
|
3
|
+
|
4
|
+
Scenario Outline: Make sure all the form elements are accessible
|
5
|
+
Given I am on the page
|
6
|
+
Then page should have all relevant "<attributes>" for the accessibility guideline
|
7
|
+
|
8
|
+
Examples:
|
9
|
+
| attributes |
|
10
|
+
| label-title-only |
|
11
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
@all
|
2
|
+
Feature: Accessibility Standards
|
3
|
+
|
4
|
+
|
5
|
+
Scenario: Check the page against BBC Accessibility Standards
|
6
|
+
Given I am on the page
|
7
|
+
Then the page should be accessible
|
8
|
+
And the page should be accessible according to: wcag2a
|
9
|
+
And the page should be accessible according to: wcag2aa
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'axe/cucumber/step_definitions'
|
2
|
+
|
3
|
+
Given(/^I am on the page$/) do
|
4
|
+
@page = Capybara.current_session
|
5
|
+
@page.visit(ENV['URL'])
|
6
|
+
puts "=====You are currently checking the page====="
|
7
|
+
puts @page.current_url
|
8
|
+
sleep(1)
|
9
|
+
end
|
10
|
+
|
11
|
+
Then(/^page should have all relevant "([^"]*)" for the accessibility guideline$/) do |attributes|
|
12
|
+
ban = ENV['EXCLUDE'] || "#crapy-selector"
|
13
|
+
step 'the page should be accessible checking: #{attributes} but excluding "#{ban}"'
|
14
|
+
end
|
15
|
+
|
16
|
+
Then(/^page should not check section "([^"]*)" for the accessibility guideline$/) do |section|
|
17
|
+
step 'the page should be accessible excluding "#{section}"'
|
18
|
+
end
|
19
|
+
|
20
|
+
Then(/^page should check section"([^"]*)" for the accessibility guideline$/) do |section|
|
21
|
+
step 'the page should be accessible excluding "#{section}"'
|
22
|
+
end
|
File without changes
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Then(/^the page should have exactly one h(\d+) heading and heading order must follow$/) do |headings|
|
2
|
+
@page = Capybara.current_session
|
3
|
+
@page.html.should include('<h1')
|
4
|
+
@page.should have_css("h1", :count => 1)
|
5
|
+
step 'the page should be accessible checking: heading-order'
|
6
|
+
step 'the page should be accessible checking: empty-heading'
|
7
|
+
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Then(/^there should be one instance of role=main as an attribute of an HTML element$/) do
|
2
|
+
@page = Capybara.current_session
|
3
|
+
@page.html.should include('role="main"')
|
4
|
+
step 'the page should be accessible checking: area-alt'
|
5
|
+
step 'the page should be accessible checking: aria-allowed-attr'
|
6
|
+
step 'the page should be accessible checking: aria-required-attr'
|
7
|
+
step 'the page should be accessible checking: aria-required-children'
|
8
|
+
step 'the page should be accessible checking: aria-required-parent'
|
9
|
+
step 'the page should be accessible checking: aria-valid-attr-value'
|
10
|
+
step 'the page should be accessible checking: aria-roles'
|
11
|
+
step 'the page should be accessible checking: aria-valid-attr-value'
|
12
|
+
step 'the page should be accessible checking: aria-valid-attr'
|
13
|
+
step 'the page should be accessible checking: aria-roles'
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Then(/^Text must be styled with units that are resizable in all browsers\.$/) do
|
2
|
+
pending # Write code here that turns the phrase above into concrete actions
|
3
|
+
end
|
4
|
+
|
5
|
+
Then(/^Content must be visible and usable with text resized to (\d+)% of normal\.$/) do |arg1|
|
6
|
+
pending # Write code here that turns the phrase above into concrete actions
|
7
|
+
end
|
8
|
+
|
9
|
+
Then(/^Content must be visible and usable with page zoomed to (\d+)% of normal\.$/) do |arg1|
|
10
|
+
pending # Write code here that turns the phrase above into concrete actions
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Then(/^page should have title html attribute with meaningful text$/) do
|
2
|
+
@page = Capybara.current_session
|
3
|
+
title = @page.title
|
4
|
+
puts "======You page title is '#{title}'. We hope it's meaningful===="
|
5
|
+
expect(title).not_to be_empty
|
6
|
+
end
|
7
|
+
|
8
|
+
Then(/^title atttribute shouldn't reapeat the content$/) do
|
9
|
+
#to do
|
10
|
+
end
|
File without changes
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'capybara'
|
4
|
+
require 'capybara/dsl'
|
5
|
+
require 'capybara/poltergeist'
|
6
|
+
require 'axe/cucumber/step_definitions'
|
7
|
+
require 'rest-client'
|
8
|
+
require 'rspec'
|
9
|
+
require 'capybara/rspec'
|
10
|
+
require 'be_valid_asset'
|
11
|
+
include BeValidAsset
|
12
|
+
|
13
|
+
BeValidAsset::Configuration.display_invalid_content = true
|
14
|
+
|
15
|
+
|
16
|
+
url = ENV['URL']
|
17
|
+
ban = ENV['EXCLUDE'] || "#crapy-selector"
|
18
|
+
|
19
|
+
Capybara.current_driver = :poltergeist
|
20
|
+
Capybara.default_driver = :poltergeist
|
21
|
+
Capybara.configure do |config|
|
22
|
+
config.run_server = false
|
23
|
+
config.javascript_driver = config.default_driver
|
24
|
+
config.default_selector = :css
|
25
|
+
config.default_wait_time = 60
|
26
|
+
end
|
27
|
+
Capybara.register_driver :poltergeist do |app|
|
28
|
+
options = {
|
29
|
+
:js_errors => false,
|
30
|
+
:timeout => 180,
|
31
|
+
:debug => false
|
32
|
+
}
|
33
|
+
Capybara::Poltergeist::Driver.new(app, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
Before do
|
37
|
+
Capybara.use_default_driver
|
38
|
+
end
|
39
|
+
|
40
|
+
After do
|
41
|
+
Capybara.reset_sessions!
|
42
|
+
end
|
@@ -8,7 +8,7 @@ AllCops:
|
|
8
8
|
- tmp/**/*
|
9
9
|
|
10
10
|
CollectionMethods:
|
11
|
-
Enabled: false
|
11
|
+
Enabled: false
|
12
12
|
|
13
13
|
Encoding:
|
14
14
|
Enabled: false
|
@@ -30,14 +30,14 @@ MethodLength:
|
|
30
30
|
Max: 20
|
31
31
|
|
32
32
|
Blocks:
|
33
|
-
Enabled: false
|
34
|
-
Enabled: false
|
33
|
+
Enabled: false
|
34
|
+
Enabled: false
|
35
35
|
|
36
36
|
AlignParameters:
|
37
37
|
Enabled: false
|
38
38
|
|
39
39
|
IfUnlessModifier:
|
40
|
-
Enabled: false
|
40
|
+
Enabled: false
|
41
41
|
|
42
|
-
|
42
|
+
TrailingCommaInLiteral:
|
43
43
|
Enabled: false
|
@@ -0,0 +1,24 @@
|
|
1
|
+
FROM ruby:latest
|
2
|
+
|
3
|
+
MAINTAINER bddfire@bddire.co.uk
|
4
|
+
|
5
|
+
ENV PHANTOM_JS="phantomjs-2.1.1-linux-x86_64"
|
6
|
+
|
7
|
+
RUN apt-get update && \
|
8
|
+
apt-get upgrade -y && \
|
9
|
+
apt-get install -y build-essential chrpath libssl-dev libxft-dev libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev && \
|
10
|
+
curl -L -O https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOM_JS.tar.bz2 && \
|
11
|
+
tar xvjf $PHANTOM_JS.tar.bz2 && \
|
12
|
+
mv $PHANTOM_JS /usr/local/share && \
|
13
|
+
ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin
|
14
|
+
|
15
|
+
RUN apt-get update && apt-get install -y \
|
16
|
+
build-essential \
|
17
|
+
nodejs
|
18
|
+
|
19
|
+
RUN mkdir -p /opt/bddfire
|
20
|
+
WORKDIR /opt/bddfire
|
21
|
+
|
22
|
+
|
23
|
+
RUN gem install bundler
|
24
|
+
RUN gem install nokogiri
|
@@ -1,8 +1,8 @@
|
|
1
|
-
source
|
2
|
-
gem 'nokogiri', '1.
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
gem 'nokogiri', '1.5.9'
|
3
3
|
gem 'cucumber'
|
4
4
|
gem 'capybara'
|
5
|
-
gem 'bddfire',
|
5
|
+
gem 'bddfire', '1.9.4'
|
6
6
|
gem 'selenium-webdriver'
|
7
7
|
gem 'poltergeist'
|
8
8
|
gem 'rake'
|
@@ -14,5 +14,9 @@ gem 'json'
|
|
14
14
|
gem 'rspec'
|
15
15
|
gem 'relish'
|
16
16
|
gem 'rubocop-checkstyle_formatter'
|
17
|
-
gem
|
18
|
-
gem
|
17
|
+
gem 'parallel_tests'
|
18
|
+
gem 'axe-matchers'
|
19
|
+
gem 'site_prism'
|
20
|
+
gem 'chromedriver-helper', '0.0.6'
|
21
|
+
gem 'magic_encoding'
|
22
|
+
gem 'be_valid_asset'
|