diff --git a/Gemfile.lock b/Gemfile.lock index 67a9001..703eda5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,16 +1,3 @@ -PATH - remote: /Users/acruikshanks/projects/ea/quke - specs: - quke (0.3.0) - capybara (~> 2.9) - chromedriver-helper (~> 1.0) - cucumber (~> 2.4) - launchy (~> 2.4) - poltergeist (~> 1.10) - rspec-expectations (~> 3.4) - selenium-webdriver (~> 2.53) - site_prism (~> 2.9) - GEM remote: https://rubygems.org/ specs: @@ -19,7 +6,7 @@ GEM archive-zip (0.7.0) io-like (~> 0.3.0) builder (3.2.3) - capybara (2.14.0) + capybara (2.14.2) addressable mime-types (>= 1.16) nokogiri (>= 1.3.3) @@ -56,17 +43,26 @@ GEM mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) - mini_portile2 (2.1.0) + mini_portile2 (2.2.0) multi_json (1.12.1) multi_test (0.1.2) mustermann (1.0.0) - nokogiri (1.7.2) - mini_portile2 (~> 2.1.0) + nokogiri (1.8.0) + mini_portile2 (~> 2.2.0) poltergeist (1.15.0) capybara (~> 2.1) cliver (~> 0.3.1) websocket-driver (>= 0.2.0) public_suffix (2.0.5) + quke (0.3.2) + capybara (~> 2.9) + chromedriver-helper (~> 1.0) + cucumber (~> 2.4) + launchy (~> 2.4) + poltergeist (~> 1.10) + rspec-expectations (~> 3.4) + selenium-webdriver (~> 2.53) + site_prism (~> 2.9) rack (2.0.3) rack-protection (2.0.0) rack @@ -108,7 +104,7 @@ PLATFORMS ruby DEPENDENCIES - quke! + quke rake rerun sinatra diff --git a/demo_app/app.rb b/demo_app/app.rb index b45c28a..915c439 100644 --- a/demo_app/app.rb +++ b/demo_app/app.rb @@ -78,3 +78,9 @@ @results = request.env erb :request_details end + +get '/jserror' do + @title = 'JavaScript error' + @results = "Open your browser's dev tools, specifically the JavaScript console. You should see an error!" + erb :javascript_error +end diff --git a/demo_app/views/index.erb b/demo_app/views/index.erb index 9009fb4..c27676f 100644 --- a/demo_app/views/index.erb +++ b/demo_app/views/index.erb @@ -10,6 +10,8 @@
  • Search
  • Radio button
  • CSS selector
  • +
  • Request details
  • +
  • JavaScript error
  • <%= erb '_partial_example'.to_sym %> diff --git a/demo_app/views/javascript_error.erb b/demo_app/views/javascript_error.erb new file mode 100644 index 0000000..2f81cf2 --- /dev/null +++ b/demo_app/views/javascript_error.erb @@ -0,0 +1,19 @@ + +
    +

    <%= @title %>

    +

    This page can be used for checking what happens when you test a page with a JavaScript error.

    +

    There are examples of how to test against the data in this page, but essentially they are just + using Capybara's find() method.

    + +
    + +
    +

    Results

    +

    <%= @results %>

    +
    diff --git a/features/javascript_error.feature b/features/javascript_error.feature new file mode 100644 index 0000000..7208f42 --- /dev/null +++ b/features/javascript_error.feature @@ -0,0 +1,15 @@ +Feature: JavaScript error + To demonstrate how you can use Quke + As a user of Quke + I want to see how JavaScript errors are handled + And how I can choose to ignore them + + Scenario: Testing driver response to a JavaScript error (page objects) + Given I am on the home page + When I go to the JavaScript error page + Then It should show we have an error + + Scenario: Testing driver response to a JavaScript error (capybara) + Given I'm at the home page + When I navigate to the JavaScript error page + Then I should see we have an error diff --git a/features/page_objects/app.rb b/features/page_objects/app.rb index effb482..c785543 100644 --- a/features/page_objects/app.rb +++ b/features/page_objects/app.rb @@ -24,4 +24,8 @@ def css_selectors_page def request_details_page @last_page = RequestDetailsPage.new end + + def javascript_error_page + @last_page = JavascriptErrorPage.new + end end diff --git a/features/page_objects/home_page.rb b/features/page_objects/home_page.rb index fe92984..3473c40 100644 --- a/features/page_objects/home_page.rb +++ b/features/page_objects/home_page.rb @@ -1,4 +1,6 @@ # Home page class HomePage < SitePrism::Page set_url '/' + + element :title, 'h1' end diff --git a/features/page_objects/javascript_error_page.rb b/features/page_objects/javascript_error_page.rb new file mode 100644 index 0000000..c59202f --- /dev/null +++ b/features/page_objects/javascript_error_page.rb @@ -0,0 +1,8 @@ +# JavaScript error page +class JavascriptErrorPage < SitePrism::Page + set_url '/jserror' + + element :title, 'h1' + + elements :results, "div[class='result']" +end diff --git a/features/request_details.feature b/features/request_details.feature index d7157e0..42bbe79 100644 --- a/features/request_details.feature +++ b/features/request_details.feature @@ -3,13 +3,11 @@ Feature: Request details As a user of Quke I want to see that the request received matches what I configured in Quke - @wip Scenario: Checking for custom user agent (page objects) Given I am on the request details page Then It should show we made a "GET" request And the user agent was "Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)" - @wip Scenario: Checking for custom user agent (capybara) Given I'm at the request details page Then I should see we made a "GET" request diff --git a/features/step_definitions/javascript_error_steps.rb b/features/step_definitions/javascript_error_steps.rb new file mode 100644 index 0000000..a6447b3 --- /dev/null +++ b/features/step_definitions/javascript_error_steps.rb @@ -0,0 +1,34 @@ +# The following steps use the page objects to drive the browser +Given(/^I am on the home page$/) do + @app = App.new + @app.home_page.load + expect(@app.home_page.title.text).to eq('Welcome to Quke') +end + +When(/^I go to the JavaScript error page$/) do + expect { @app.javascript_error_page.load }.to raise_error(Capybara::Poltergeist::JavascriptError) +end + +Then(/^It should show we have an error$/) do + # We have to capture the error in the previous step else the exception will + # block us from continuing. However the scenario reads better if we can break + # it down. + true +end + +# The following steps use capybara directly to drive the browser +Given(/^I'm at the home page$/) do + visit '/' + expect(page).to have_content('Welcome to Quke') +end + +When(/^I navigate to the JavaScript error page$/) do + expect { visit('/jserror') }.to raise_error(Capybara::Poltergeist::JavascriptError) +end + +Then(/^I should see we have an error$/) do + # We have to capture the error in the previous step else the exception will + # block us from continuing. However the scenario reads better if we can break + # it down. + true +end