Today I tried to use the page object pattern with Nightwatch.js that is created when using the webpack template in vue-cli. It turns out they are not configured by default. This means you need to add
page_objects_path: ['test/e2e/pages'],
to your tests/e2e/nightwatch.conf.js
file to start using it.
The usage scenario is quite simple
- Create a file describing the page
- Use it in a test
Everything you need to know about page object pattern and Nightwatch is here so don't hesitate to check it out. Here's a basic example, the initial e2e test created when the app was scaffolded, but this time rewritten using page object patter.
// For authoring Nightwatch tests, see
// http://nightwatchjs.org/guide#usage
module.exports = {
'default 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
browser.page.home()
.open(devServer)
.assertMainContentPresent()
.assertHeaderText('Welcome to Your Vue.js App')
.assertMainLogoPresent()
browser.end()
}
}
And now the page definition in tests/pages/home.js
:
module.exports = {
elements: {
container: {
selector: "#app"
},
hello: {
selector: ".hello"
},
title: {
selector: "h1"
},
logo: {
selector: "#app > img"
},
},
commands: [ {
open(url) {
return this
.navigate(url)
.waitForElementVisible('@container', 5000)
},
assertHeaderText(content) {
return this.assert.containsText('@title', content)
},
assertMainContentPresent() {
return this.assert.elementPresent('@hello')
},
assertMainLogoPresent() {
return this.assert.elementCount('@logo', 1)
},
} ]
}
Basically a page object is what a module exports. It is divided into 3 sections
elements
- definition how to find certain elementscommands
- pieces of work the page doessections
- (absent in this example)grouping mechanism for definitions
That's it
No comments:
Post a Comment