From b1afa8076c474e657cdf86af0a851908321c335e Mon Sep 17 00:00:00 2001 From: Gunther Brunner Date: Tue, 26 Aug 2014 23:37:50 +0900 Subject: [PATCH] -Add shell e2e test. -Add parallel multi browser protractor configuration. -Add screenshot reports. -Add fail fast helper. --- gulpfile.js | 7 ++++- res/.jshintrc | 3 +- res/test/e2e/control/control-spec.js | 46 +++++++++++++++++++++++++--- res/test/e2e/helpers/fail-fast.js | 10 ++++++ res/test/protractor-multi.conf.js | 33 ++++++++++++++++++++ res/test/protractor.conf.js | 7 +++++ 6 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 res/test/e2e/helpers/fail-fast.js create mode 100644 res/test/protractor-multi.conf.js diff --git a/gulpfile.js b/gulpfile.js index 3236c4e3..c6b1d9d3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,7 +10,6 @@ var gettext = require('gulp-angular-gettext') var jade = require('gulp-jade') var clean = require('gulp-clean') var protractor = require("gulp-protractor") -var protractorConfig = './res/test/protractor.conf' var karma = require('karma').server var karmaConfig = '/res/test/karma.conf.js' var stream = require('stream') @@ -60,6 +59,8 @@ gulp.task('webdriver-update', protractor.webdriver_update) gulp.task('webdriver-standalone', protractor.webdriver_standalone) gulp.task('protractor', function (callback) { + var protractorConfig = './res/test/protractor.conf' + var args = [] if (typeof gutil.env.suite === 'string') { args.push('--suite') @@ -70,6 +71,10 @@ gulp.task('protractor', function (callback) { args.push('debug') } + if (gutil.env.multi) { + protractorConfig = './res/test/protractor-multi.conf' + } + gulp.src(["./res/test/e2e/**/*.js"]) .pipe(protractor.protractor({ configFile: protractorConfig, diff --git a/res/.jshintrc b/res/.jshintrc index 9081e2cf..982c60cc 100644 --- a/res/.jshintrc +++ b/res/.jshintrc @@ -38,6 +38,7 @@ "Promise": true, "$": false, "$$": false, - "protractor": false + "protractor": false, + "jasmine": false } } diff --git a/res/test/e2e/control/control-spec.js b/res/test/e2e/control/control-spec.js index 04356614..a747e24f 100644 --- a/res/test/e2e/control/control-spec.js +++ b/res/test/e2e/control/control-spec.js @@ -30,6 +30,48 @@ describe('Control Page', function () { expect(controlPage.kickDeviceButton, true) }) + + describe('Dashboard', function () { + var DashboardTab = function () { + this.shellInput = element(by.model('command')) + this.shellResults = element.all(by.css('.shell-results')).first() + + this.helloString = 'hello adb' + this.echoCommand = 'echo "' + this.helloString + '"' + this.clearCommand = 'clear' + this.openMenuCommand = 'input keyevent 3' + + this.shellExecute = function (command) { + this.shellInput.sendKeys(command) + this.shellInput.sendKeys(protractor.Key.ENTER) + } + } + var dashboardTab = new DashboardTab() + + describe('Shell', function () { + + it('should echo "hello adb" to the adb shell', function () { + expect(dashboardTab.shellInput.isPresent()).toBe(true) + + dashboardTab.shellExecute(dashboardTab.echoCommand) + + expect(dashboardTab.shellResults.getText()).toBe(dashboardTab.helloString) + }) + + it('should clear adb shell input', function () { + dashboardTab.shellExecute(dashboardTab.clearCommand) + expect(dashboardTab.shellResults.getText()).toBeFalsy() + }) + + it('should open and close the menu button trough adb shell', function () { + dashboardTab.shellExecute(dashboardTab.openMenuCommand) + dashboardTab.shellExecute(dashboardTab.openMenuCommand) + }) + + }) + }) + + it('should stop controlling an usable device', function () { controlPage.kickDevice() @@ -38,9 +80,5 @@ describe('Control Page', function () { }) }) - describe('Dashboard', function () { - describe('Shell', function () { - }) - }) }) diff --git a/res/test/e2e/helpers/fail-fast.js b/res/test/e2e/helpers/fail-fast.js new file mode 100644 index 00000000..b9ae6fe8 --- /dev/null +++ b/res/test/e2e/helpers/fail-fast.js @@ -0,0 +1,10 @@ +// https://github.com/angular/protractor/issues/499 + +module.exports = function FailFast() { + var passed = jasmine.getEnv().currentSpec.results().passed() + if (!passed) { + jasmine.getEnv().specFilter = function (spec) { + return false + } + } +} diff --git a/res/test/protractor-multi.conf.js b/res/test/protractor-multi.conf.js new file mode 100644 index 00000000..316db5ba --- /dev/null +++ b/res/test/protractor-multi.conf.js @@ -0,0 +1,33 @@ +var config = require('./protractor.conf').config +var HtmlReporter = require('protractor-html-screenshot-reporter') + +config.chromeOnly = false +config.capabilities = null +config.multiCapabilities = [ + { + browserName: 'chrome', + chromeOptions: { + args: ['--test-type'] // Prevent security warning bug in ChromeDriver + } + }, + { + browserName: 'firefox' + } + //{ + // browserName: 'safari' + //} + // add appium/sauce labs +] + +config.onPrepare = function () { + var loginPage = new LoginPage() + loginPage.doLogin() + loginPage.cleanUp() + + jasmine.getEnv().addReporter(new HtmlReporter({ + baseDirectory: './res/test/test_out/screenshots' + })) +} + + +exports.config = config diff --git a/res/test/protractor.conf.js b/res/test/protractor.conf.js index dad2470e..325e6af4 100644 --- a/res/test/protractor.conf.js +++ b/res/test/protractor.conf.js @@ -1,6 +1,8 @@ // Reference: https://github.com/angular/protractor/blob/master/referenceConf.js var LoginPage = require('./e2e/login') var BrowserLogs = require('./e2e/helpers/browser-logs') +var FailFast = require('./e2e/helpers/fail-fast') +var HtmlReporter = require('protractor-html-screenshot-reporter') exports.config = { baseUrl: process.env.STF_URL || 'http://localhost:7100/#!/', @@ -40,8 +42,13 @@ exports.config = { loginPage.doLogin() loginPage.cleanUp() + //jasmine.getEnv().addReporter(new HtmlReporter({ + // baseDirectory: './res/test/test_out/screenshots' + //})) + afterEach(function () { BrowserLogs({expectNoLogs: true}) + FailFast() }) }, onComplete: function () {