v4 initial commit

This commit is contained in:
Łukasz Holeczek
2021-08-02 23:57:02 +02:00
parent 9d65013c0f
commit 79559ae334
225 changed files with 13242 additions and 32434 deletions
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
rules: {
"no-unused-expressions": "off",
},
};
@@ -1,2 +0,0 @@
// empty custom assertion needed for git to keep track of the folder
module.exports.assertion = function () {}
@@ -0,0 +1,34 @@
/**
* A custom Nightwatch assertion. The assertion name is the filename.
*
* Example usage:
* browser.assert.elementCount(selector, count)
*
* For more information on custom assertions see:
* https://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-assertions
*
*
* @param {string|object} selectorOrObject
* @param {number} count
*/
exports.assertion = function elementCount(selectorOrObject, count) {
let selector;
// when called from a page object element or section
if (typeof selectorOrObject === "object" && selectorOrObject.selector) {
// eslint-disable-next-line prefer-destructuring
selector = selectorOrObject.selector;
} else {
selector = selectorOrObject;
}
this.message = `Testing if element <${selector}> has count: ${count}`;
this.expected = count;
this.pass = (val) => val === count;
this.value = (res) => res.value;
function evaluator(_selector) {
return document.querySelectorAll(_selector).length;
}
this.command = (cb) => this.api.execute(evaluator, [selector], cb);
};
@@ -1 +0,0 @@
// empty custom command needed for git to keep track of the folder
@@ -0,0 +1,39 @@
/**
* A very basic Nightwatch custom command. The command name is the filename and the
* exported "command" function is the command.
*
* Example usage:
* browser.customExecute(function() {
* console.log('Hello from the browser window')
* });
*
* For more information on writing custom commands see:
* https://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-commands
*
* @param {*} data
*/
exports.command = function command(data) {
// Other Nightwatch commands are available via "this"
// .execute() inject a snippet of JavaScript into the page for execution.
// the executed script is assumed to be synchronous.
//
// See https://nightwatchjs.org/api/execute.html for more info.
//
this.execute(
// The function argument is converted to a string and sent to the browser
function (argData) {
return argData;
},
// The arguments for the function to be sent to the browser are specified in this array
[data],
function (result) {
// The "result" object contains the result of what we have sent back from the browser window
console.log("custom execute result:", result.value);
}
);
return this;
};
+23
View File
@@ -0,0 +1,23 @@
/**
* A basic Nightwatch custom command
* which demonstrates usage of ES6 async/await instead of using callbacks.
* The command name is the filename and the exported "command" function is the command.
*
* Example usage:
* browser.openHomepage();
*
* For more information on writing custom commands see:
* https://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-commands
*
*/
module.exports = {
command: async function () {
// Other Nightwatch commands are available via "this"
// .init() simply calls .url() command with the value of the "launch_url" setting
this.init();
this.waitForElementVisible("#app");
const result = await this.elements("css selector", "#app ul");
this.assert.strictEqual(result.value.length, 3);
},
};
@@ -0,0 +1,24 @@
/**
* A class-based Nightwatch custom command which is a variation of the openHomepage.js command.
* The command name is the filename and class needs to contain a "command" method.
*
* Example usage:
* browser.openHomepageClass();
*
* For more information on writing custom commands see:
* https://nightwatchjs.org/guide/extending-nightwatch/#writing-custom-commands
*
*/
const assert = require("assert");
module.exports = class {
async command() {
// Other Nightwatch commands are available via "this.api"
this.api.init();
this.api.waitForElementVisible("#app");
const result = await this.api.elements("css selector", "#app ul");
assert.strictEqual(result.value.length, 3);
}
};
+103
View File
@@ -0,0 +1,103 @@
///////////////////////////////////////////////////////////////////////////////////
// Refer to the entire list of global config settings here:
// https://github.com/nightwatchjs/nightwatch/blob/master/lib/settings/defaults.js#L16
//
// More info on test globals:
// https://nightwatchjs.org/gettingstarted/configuration/#test-globals
//
///////////////////////////////////////////////////////////////////////////////////
module.exports = {
// this controls whether to abort the test execution when an assertion failed and skip the rest
// it's being used in waitFor commands and expect assertions
abortOnAssertionFailure: true,
// this will overwrite the default polling interval (currently 500ms) for waitFor commands
// and expect assertions that use retry
waitForConditionPollInterval: 500,
// default timeout value in milliseconds for waitFor commands and implicit waitFor value for
// expect assertions
waitForConditionTimeout: 5000,
default: {
/*
The globals defined here are available everywhere in any test env
*/
/*
myGlobal: function() {
return 'I\'m a method';
}
*/
},
firefox: {
/*
The globals defined here are available only when the chrome testing env is being used
i.e. when running with --env firefox
*/
/*
* myGlobal: function() {
* return 'Firefox specific global';
* }
*/
},
/////////////////////////////////////////////////////////////////
// Global hooks
// - simple functions which are executed as part of the test run
// - take a callback argument which can be called when an async
// async operation is finished
/////////////////////////////////////////////////////////////////
/**
* executed before the test run has started, so before a session is created
*/
/*
before(cb) {
//console.log('global before')
cb();
},
*/
/**
* executed before every test suite has started
*/
/*
beforeEach(browser, cb) {
//console.log('global beforeEach')
cb();
},
*/
/**
* executed after every test suite has ended
*/
/*
afterEach(browser, cb) {
browser.perform(function() {
//console.log('global afterEach')
cb();
});
},
*/
/**
* executed after the test run has finished
*/
/*
after(cb) {
//console.log('global after')
cb();
},
*/
/////////////////////////////////////////////////////////////////
// Global reporter
// - define your own custom reporter
/////////////////////////////////////////////////////////////////
/*
reporter(results, cb) {
cb();
}
*/
};
+52
View File
@@ -0,0 +1,52 @@
/**
* A Nightwatch page object. The page object name is the filename.
*
* Example usage:
* browser.page.homepage.navigate()
*
* For more information on working with page objects see:
* https://nightwatchjs.org/guide/working-with-page-objects/
*
*/
module.exports = {
url: "/",
commands: [],
// A page object can have elements
elements: {
appContainer: "#app",
},
// Or a page objects can also have sections
sections: {
app: {
selector: "#app",
elements: {
logo: "img",
},
// - a page object section can also have sub-sections
// - elements or sub-sections located here are retrieved using the "app" section as the base
sections: {
headline: {
selector: "h1",
},
welcome: {
// the equivalent css selector for the "welcome" sub-section would be:
// '#app div.hello'
selector: "div.hello",
elements: {
cliPluginLinks: {
selector: "ul",
index: 0,
},
},
},
},
},
},
};
-1
View File
@@ -1 +0,0 @@
// empty page-object needed for git to keep track of the folder
+36
View File
@@ -0,0 +1,36 @@
////////////////////////////////////////////////////////////////
// For authoring Nightwatch tests, see
// https://nightwatchjs.org/guide
//
// For more information on working with page objects see:
// https://nightwatchjs.org/guide/working-with-page-objects/
////////////////////////////////////////////////////////////////
module.exports = {
beforeEach: (browser) => browser.init(),
"e2e tests using page objects": (browser) => {
const homepage = browser.page.homepage();
homepage.waitForElementVisible("@appContainer");
const app = homepage.section.app;
app.assert.elementCount("@logo", 1);
app.expect.section("@welcome").to.be.visible;
app.expect
.section("@headline")
.text.to.match(/^Welcome to Your Vue\.js (.*)App$/);
browser.end();
},
'verify if string "e2e-nightwatch" is within the cli plugin links': (
browser
) => {
const homepage = browser.page.homepage();
const welcomeSection = homepage.section.app.section.welcome;
welcomeSection.expect
.element("@cliPluginLinks")
.text.to.contain("e2e-nightwatch");
},
};
+12 -76
View File
@@ -1,82 +1,18 @@
// For authoring Nightwatch tests, see
// http://nightwatchjs.org/guide#usage
// https://nightwatchjs.org/guide
module.exports = {
before: function (browser) {
console.log('Setting up... browser', typeof browser)
"default e2e tests": (browser) => {
browser
.init()
.waitForElementVisible("#app")
.assert.elementPresent(".hello")
.assert.containsText("h1", "Welcome to Your Vue.js App")
.assert.elementCount("img", 1)
.end();
},
after: function (browser) {
console.log('Closing down... browser', typeof browser)
"example e2e test using a custom command": (browser) => {
browser.openHomepage().assert.elementPresent(".hello").end();
},
'CoreUI Vue e2e tests': function (browser) {
// automatically uses dev Server port from /config.index.js
// default: http://localhost:8080
// see nightwatch.conf.js
// const devServer = browser.globals.devServerURL
const devServer = process.env.VUE_DEV_SERVER_URL
const toggle = (mobile = false) => {
if (mobile) {
browser.click('.c-header-toggler.d-lg-none')
} else {
browser.click('.c-header-toggler.d-md-down-none')
}
}
const sidebarIsVisible = () => {
browser.expect.element('.c-sidebar').to.have.css('margin-left').which.equals('0px')
}
const sidebarIsHidden = () => {
browser.expect.element('.c-sidebar').to.have.css('margin-left').which.not.equals('0px')
}
browser.url(devServer).pause(500).expect.element('body').to.be.present
browser.waitForElementVisible('.c-app', 1000)
.assert.elementPresent('.c-header')
.assert.elementPresent('.c-sidebar')
.assert.elementPresent('.c-footer')
.assert.elementPresent('.c-sidebar')
.assert.elementPresent('.c-body')
browser.resizeWindow(700, 800)
sidebarIsHidden()
toggle('mobile')
browser.pause(500)
sidebarIsVisible()
browser.click('.c-sidebar-backdrop')
browser.pause(500)
sidebarIsHidden()
toggle('mobile')
browser.pause(500)
browser.click('.c-sidebar-nav-dropdown-toggle')
browser.pause(500)
sidebarIsVisible()
browser.click('.c-sidebar-nav-item')
browser.pause(500)
sidebarIsHidden()
browser.resizeWindow(1900, 800)
sidebarIsVisible()
browser.pause(500)
browser.click('.c-sidebar-minimizer')
browser.click('.c-body')
browser.pause(500)
browser.expect.element('.c-sidebar').to.have.css('width').which.equals('56px')
browser.click('.c-sidebar-minimizer')
browser.click('.c-body')
browser.pause(500)
browser.expect.element('.c-sidebar').to.have.css('width').which.equals('256px')
browser.click('.c-header-toggler.d-md-down-none')
browser.pause(1000)
sidebarIsHidden()
browser.pause(1000)
browser.end()
}
}
};