acceptance_test2 0.9.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,14 +5,16 @@ require 'capybara/rspec'
5
5
  require 'capybara/dsl'
6
6
 
7
7
  require 'singleton'
8
+ require 'file_utils'
8
9
 
9
10
  require 'acceptance_test/capybara/capybara_helper'
10
11
 
11
12
  class RspecHelper
12
13
  include Singleton
13
14
 
14
- def configure(app_host:, driver: CapybaraHelper::DEFAULT_DRIVER, browser: CapybaraHelper::DEFAULT_BROWSER,
15
- wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
15
+ def configure(app_host:, driver: CapybaraHelper::DEFAULT_DRIVER,
16
+ browser: CapybaraHelper::DEFAULT_BROWSER,
17
+ wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
16
18
  register_extensions
17
19
 
18
20
  RSpec.configure do |rspec_config|
@@ -25,8 +27,9 @@ class RspecHelper
25
27
  def create_shared_context(name)
26
28
  register_extensions
27
29
 
28
- RSpec.shared_context name do |app_host:, driver: CapybaraHelper::DEFAULT_DRIVER, browser: CapybaraHelper::DEFAULT_BROWSER,
29
- wait_time: CapybaraHelper::DEFAULT_WAIT_TIME|
30
+ RSpec.shared_context name do |app_host:, driver: CapybaraHelper::DEFAULT_DRIVER,
31
+ browser: CapybaraHelper::DEFAULT_BROWSER,
32
+ wait_time: CapybaraHelper::DEFAULT_WAIT_TIME|
30
33
  self.define_singleton_method(:include_context, lambda do
31
34
  params = {app_host: app_host, driver: driver, browser: browser, wait_time: wait_time}
32
35
 
@@ -37,8 +40,9 @@ class RspecHelper
37
40
  end
38
41
  end
39
42
 
40
- def configure_rspec(rspec_config, app_host:, driver: CapybaraHelper::DEFAULT_DRIVER, browser: CapybaraHelper::DEFAULT_BROWSER,
41
- wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
43
+ def configure_rspec(rspec_config, app_host:, driver: CapybaraHelper::DEFAULT_DRIVER,
44
+ browser: CapybaraHelper::DEFAULT_BROWSER,
45
+ wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
42
46
  rspec_config.around(:each) do |example|
43
47
  params = {metadata: example.metadata, app_host: app_host, driver: driver, browser: browser, wait_time: wait_time}
44
48
 
@@ -46,8 +50,18 @@ class RspecHelper
46
50
 
47
51
  example.run
48
52
 
49
- RspecHelper.instance.after_test metadata: example.metadata, exception: example.exception
53
+ RspecHelper.instance.after_test metadata: example.metadata, exception: example.exception
50
54
  end
55
+
56
+ # rspec_config.before do |example|
57
+ # params = {metadata: example.metadata, app_host: app_host, driver: driver, browser: browser, wait_time: wait_time}
58
+ #
59
+ # RspecHelper.instance.before_test params
60
+ # end
61
+
62
+ # rspec_config.after do |example|
63
+ # RspecHelper.instance.after_test metadata: example.metadata, exception: example.exception
64
+ # end
51
65
  end
52
66
 
53
67
  def before_test metadata:, app_host:, driver:, browser:, wait_time:
@@ -60,9 +74,6 @@ class RspecHelper
60
74
 
61
75
  CapybaraHelper.instance.before_test params
62
76
 
63
- # puts "Using driver: #{Capybara.current_driver}."
64
- # puts "Default wait time: #{Capybara.default_max_wait_time }."
65
-
66
77
  new_driver = Capybara.current_driver
67
78
 
68
79
  Capybara.current_session.instance_variable_set(:@mode, new_driver)
@@ -73,20 +84,47 @@ class RspecHelper
73
84
  end
74
85
  end
75
86
 
76
- def after_test(metadata: metadata, exception: exception)
77
- CapybaraHelper.instance.after_test metadata: metadata, exception: exception
87
+ def after_test(metadata: nil, exception: nil)
88
+ selected_driver = RspecHelper.instance.get_driver(metadata, driver: nil)
78
89
 
79
- # driver = driver(example.metadata)
80
- #
81
- # if driver and exception and page and not [:webkit].include? driver
82
- # screenshot_maker.basedir = File.expand_path(config[:screenshots_dir])
83
- #
84
- # screenshot_maker.make page, example.metadata
85
- #
86
- # puts example.metadata[:full_description]
87
- # puts "Screenshot: #{screenshot_maker.screenshot_url(example.metadata)}"
88
- # end
89
- #
90
+ if selected_driver and exception
91
+ path = build_screenshot_name 'screenshots', metadata[:file_path], metadata[:line_number]
92
+
93
+ Capybara.current_session.save_screenshot(path)
94
+
95
+ puts metadata[:description]
96
+ end
97
+
98
+ CapybaraHelper.instance.after_test name: File.basename(metadata[:file_path]), exception: exception
99
+ end
100
+
101
+ def build_screenshot_name basedir, file_path, line_number=nil
102
+ FileUtils.mkdir_p basedir unless File.exist? basedir
103
+
104
+ name = "#{build_name(file_path)}#{line_number ? '-'+line_number.to_s : ''}.png"
105
+
106
+ File.expand_path("#{basedir}/#{name}")
107
+ end
108
+
109
+ def build_name path
110
+ full_path = File.expand_path(path)
111
+
112
+ spec_index = full_path.index("/spec")
113
+
114
+ if spec_index
115
+ extension = File.extname(path)
116
+ ext_index = extension.size == 0 ? -1 : full_path.index(extension)-1
117
+
118
+ name = full_path[spec_index+1..ext_index].gsub("/", "_")
119
+
120
+ name = name[5..-1] if name =~ /^spec_/
121
+ name = name[9..-1] if name =~ /^features_/
122
+ name = name[11..-1] if name =~ /^acceptance_/
123
+ else
124
+ name = path
125
+ end
126
+
127
+ name
90
128
  end
91
129
 
92
130
  def register_extensions
@@ -99,15 +137,13 @@ class RspecHelper
99
137
  config.include Capybara::RSpecMatchers
100
138
  config.include Capybara::DSL
101
139
  end
102
-
103
- # RSpec::Core::ExampleGroup.send :include, Capybara::DSL
104
140
  end
105
141
 
106
142
  def get_driver(metadata, driver:)
107
- #driver = ENV['DRIVER'].nil? ? nil : ENV['DRIVER'].to_sym
108
-
109
143
  driver_name = driver
110
144
 
145
+ driver_name = ENV['DRIVER'].nil? ? nil : ENV['DRIVER'].to_sym unless driver_name
146
+
111
147
  driver_name = metadata[:driver] unless driver_name
112
148
 
113
149
  supported_drivers.each do |supported_driver|
@@ -121,10 +157,10 @@ class RspecHelper
121
157
  end
122
158
 
123
159
  def get_browser(metadata, browser:)
124
- #browser_name = ENV['BROWSER'].nil? ? nil : ENV['BROWSER'].to_sym
125
-
126
160
  browser_name = browser
127
161
 
162
+ browser_name = ENV['BROWSER'].nil? ? nil : ENV['BROWSER'].to_sym unless browser_name
163
+
128
164
  browser_name = metadata[:browser] unless browser_name
129
165
 
130
166
  supported_browsers.each do |supported_browser|
@@ -138,7 +174,7 @@ class RspecHelper
138
174
  end
139
175
 
140
176
  def supported_drivers
141
- [:selenium, :webkit]
177
+ [:selenium]
142
178
  end
143
179
 
144
180
  def supported_browsers
@@ -174,4 +210,5 @@ class RspecHelper
174
210
  # end
175
211
  # end
176
212
  end
177
- end
213
+ end
214
+
@@ -1,3 +1,3 @@
1
1
  class AcceptanceTest
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.1"
3
3
  end
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "acceptance-demo",
3
+ "version": "1.0.0",
4
+ "description": "npm package for acceptance-demo",
5
+ "author": "Alexander Shvets",
6
+ "repository": {
7
+ "url": ""
8
+ },
9
+ "engines": {
10
+ "node": ">= 0.10.32"
11
+ },
12
+ "devDependencies": {
13
+ "protractor": "~2.5.1"
14
+ },
15
+ "scripts": {
16
+ "webdriver-manager-update": "node_modules/.bin/webdriver-manager update --standalone",
17
+ "webdriver-manager-start": "node_modules/.bin/webdriver-manager start",
18
+ "protractor": "node_modules/.bin/protractor protractor.conf.js --suite angularDemo"
19
+ }
20
+ }
@@ -0,0 +1,47 @@
1
+ // protractor.conf.js
2
+
3
+ exports.config = {
4
+ //seleniumAddress: '', // The address of a running selenium server.
5
+ framework: 'jasmine2',
6
+
7
+ directConnect: true,
8
+
9
+ // Capabilities to be passed to the webdriver instance.
10
+ capabilities: {
11
+ browserName: 'chrome'
12
+ },
13
+
14
+ suites: {
15
+ angularDemo: 'spec/js/angularSiteSpec.js'
16
+ },
17
+
18
+ // Options to be passed to Jasmine-node.
19
+ jasmineNodeOpts: {
20
+ showColors: true, // Use colors in the command line report.
21
+
22
+ // If true, display spec names.
23
+ isVerbose: true,
24
+
25
+ // If true, include stack traces in failures.
26
+ includeStackTrace: true,
27
+ // Default time to wait in ms before a test fails.
28
+ defaultTimeoutInterval: 350000
29
+ },
30
+
31
+ allScriptsTimeout: 300000,
32
+
33
+ onPrepare: function() {
34
+ require('./spec/js/support/extend.js');
35
+ var env = require('./spec/js/support/env.js');
36
+
37
+ console.log("Environment: " + env.name());
38
+ console.log("webappUrl: " + env.webappUrl());
39
+ },
40
+
41
+ /**
42
+ * onComplete will be called just before the driver quits.
43
+ */
44
+ onComplete: function () {
45
+ console.log("Completed");
46
+ }
47
+ };
@@ -0,0 +1,20 @@
1
+ var env = require('./support/env.js');
2
+
3
+ describe('angularjs homepage todo list', function() {
4
+ it('should add a todo', function() {
5
+ browser.get(env.webappUrl());
6
+
7
+ element(by.model('todoList.todoText')).sendKeys('write first protractor test');
8
+ element(by.css('[value="add"]')).click();
9
+
10
+ var todoList = element.all(by.repeater('todo in todoList.todos'));
11
+ expect(todoList.count()).toEqual(2);
12
+
13
+ expect(todoList.get(1).getText()).toEqual('build an angular app');
14
+
15
+ // You wrote your first test, cross it off the list
16
+ todoList.get(1).element(by.css('input')).click();
17
+ var completedAmount = element.all(by.css('.done-true'));
18
+ expect(completedAmount.count()).toEqual(2);
19
+ });
20
+ });
@@ -0,0 +1,13 @@
1
+ var env = {
2
+
3
+ name: function() {
4
+ return (!process.env.BUILD_ENV) ? 'development' : process.env.BUILD_ENV;
5
+ },
6
+
7
+ webappUrl: function() {
8
+ return 'https://angularjs.org';
9
+ }
10
+
11
+ };
12
+
13
+ module.exports = env;
@@ -0,0 +1,48 @@
1
+ // add subclass to Object with proper inheritance
2
+ // use this._super to access an overridden method.
3
+
4
+ var initializing = false;
5
+ var superPattern = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/;
6
+
7
+ Object.subClass = function(properties) {
8
+ var _super = this.prototype;
9
+
10
+ initializing = true;
11
+ var proto = new this();
12
+ initializing = false;
13
+
14
+ for (var name in properties) {
15
+ proto[name] = typeof properties[name] == "function" &&
16
+ typeof _super[name] == "function" &&
17
+ superPattern.test(properties[name]) ?
18
+ (function(name, fn) {
19
+ return function() {
20
+ var tmp = this._super;
21
+
22
+ this._super = _super[name];
23
+
24
+ var ret = fn.apply(this, arguments);
25
+ this._super = tmp;
26
+
27
+ return ret;
28
+ };
29
+ })(name, properties[name]) :
30
+ properties[name];
31
+ }
32
+
33
+ function Class() {
34
+ // All construction is actually done in the init method
35
+ if (!initializing && this.init)
36
+ this.init.apply(this, arguments);
37
+ }
38
+
39
+ Class.prototype = proto;
40
+
41
+ Class.constructor = Class;
42
+
43
+ Class.subClass = arguments.callee;
44
+
45
+ return Class;
46
+ };
47
+
48
+ module.exports = Object;
@@ -7,5 +7,7 @@ require 'minitest/reporters'
7
7
 
8
8
  Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # spec-like progress
9
9
 
10
+ $LOAD_PATH.unshift File.expand_path("../lib", File.dirname(__FILE__))
11
+
10
12
  require 'acceptance_test/minitest/acceptance_spec'
11
13
  require 'acceptance_test/capybara/capybara_helper'
@@ -15,7 +15,7 @@ class GoogleSearchTest < AcceptanceSpec
15
15
  end
16
16
 
17
17
  after do
18
- CapybaraHelper.instance.after_test
18
+ CapybaraHelper.instance.after_test name: __name__.gsub(' ', '_')
19
19
  end
20
20
 
21
21
  it "finding the answer to the question of life", js: true do
@@ -2,18 +2,64 @@ require_relative '../rspec_helper'
2
2
 
3
3
  config = {app_host: "http://wikipedia.org", wait_time: 15}
4
4
 
5
+ # CapybaraHelper.instance.register_driver(:webkit)
6
+ # CapybaraHelper.instance.register_driver(:poltergeist)
7
+
5
8
  RspecHelper.instance.create_shared_context "WikipediaSearch"
6
9
 
7
10
  RSpec.describe 'Wikipedia Search' do
8
11
  include_context "WikipediaSearch", config
9
12
 
10
- it "searches on wikipedia web site" do
13
+ it "searches on wikipedia web site (selenium)" do
14
+ expect(Capybara.current_driver).to equal(:selenium_chrome)
15
+
11
16
  visit('/')
12
17
 
13
18
  fill_in "searchInput", :with => "Capybara"
14
19
 
15
- find(".formBtn", match: :first).click
20
+ find(".pure-button", match: :first).click
16
21
 
17
22
  expect(page).to have_content "Hydrochoerus hydrochaeris"
18
23
  end
24
+
25
+ # describe do
26
+ # before do
27
+ # Capybara::Webkit.configure do |c|
28
+ # c.allow_url("upload.wikimedia.org")
29
+ # c.allow_url("en.wikipedia.org")
30
+ # c.allow_url("wikipedia.org")
31
+ # c.allow_url("meta.wikimedia.org")
32
+ # c.allow_url("login.wikimedia.org")
33
+ # end
34
+ # end
35
+ #
36
+ # it "searches on wikipedia web site (webkit)", driver: :webkit do
37
+ # puts "driver: #{Capybara.current_driver}"
38
+ # expect(Capybara.current_driver).to equal(:webkit)
39
+ #
40
+ # visit('/')
41
+ #
42
+ # fill_in "searchInput", :with => "Capybara"
43
+ #
44
+ # find(".formBtn", match: :first).click
45
+ #
46
+ # expect(page).to have_content "Hydrochoerus hydrochaeris"
47
+ # end
48
+ # end
49
+
50
+ # it "searches on wikipedia web site (poltergeist)", driver: :poltergeist do
51
+ # if Gem::Platform.local.os.to_sym == :darwin
52
+ # puts "This OS: #{Gem::Platform.local.os} doesn't support phantomjs."
53
+ # else
54
+ # expect(Capybara.current_driver).to equal(:poltergeist)
55
+ #
56
+ # visit('/')
57
+ #
58
+ # fill_in "searchInput", :with => "Capybara"
59
+ #
60
+ # find(".formBtn", match: :first).click
61
+ #
62
+ # expect(page).to have_content "Hydrochoerus hydrochaeris"
63
+ # end
64
+ # end
19
65
  end
@@ -19,13 +19,11 @@ class WikipediaSearchTest < AcceptanceSpec
19
19
  end
20
20
 
21
21
  it "finding the information about capybara", js: true do
22
- skip
23
-
24
22
  visit "/"
25
23
 
26
24
  fill_in "searchInput", :with => "capybara"
27
25
 
28
- find(".formBtn", match: :first).click # submit
26
+ find(".pure-button", match: :first).click # submit
29
27
 
30
28
  page.must_have_content('capybara')
31
29
  end
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+
3
+ #######################################
4
+ # [chrome]
5
+
6
+ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
7
+
8
+ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
9
+
10
+ sudo apt-get update
11
+
12
+ sudo apt-get install -y google-chrome-stable
13
+
14
+
15
+ #######################################
16
+ # [chromedriver]
17
+
18
+ sudo apt-get install -y unzip
19
+
20
+ wget -N http://chromedriver.storage.googleapis.com/2.20/chromedriver_linux64.zip -P ~/Downloads
21
+
22
+ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads
23
+
24
+ chmod +x ~/Downloads/chromedriver
25
+
26
+ sudo mv -f ~/Downloads/chromedriver /usr/local/share/chromedriver
27
+
28
+ sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
29
+
30
+ sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
31
+
32
+
33
+ #######################################
34
+ # [ffmpeg]
35
+
36
+ sudo apt-get install -y ffmpeg
37
+ sudo apt-get install -y libav-tools
38
+
39
+
40
+ ##############################
41
+ # [firefox]
42
+
43
+ sudo apt-get install -y firefox
44
+
45
+
46
+ ##############################
47
+ # [phantomjs]
48
+
49
+ #sudo apt-get install phantomjs
50
+
51
+ cd /usr/local/share
52
+
53
+ sudo wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
54
+
55
+ sudo tar xjf phantomjs-1.9.8-linux-x86_64.tar.bz2
56
+
57
+ sudo ln -s /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/share/phantomjs
58
+ sudo ln -s /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
59
+ sudo ln -s /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/bin/phantomjs
60
+
61
+
62
+ ##############################
63
+ # [imagemagick]
64
+
65
+ sudo apt-get install -y imagemagick
66
+ sudo apt-get install -y X11-apps
67
+
68
+
69
+ ##############################
70
+ # [apache]
71
+
72
+ sudo apt-get install -y apache2
73
+
74
+
75
+ #######################################
76
+ # [node]
77
+ # Installs node
78
+
79
+ sudo apt-get install -y node
80
+
81
+
82
+ #######################################
83
+ # [rbenv]
84
+ # Installs node
85
+
86
+ sudo apt-get install -y rbenv
87
+ git clone git://github.com/jf/rbenv-gemset.git $HOME/.rbenv/plugins/rbenv-gemset
88
+
89
+