Nightwatch.나는 js에서 PageObject를 시도했다.
15292 단어 JavaScripte2eNightwatch
제가 Selenide로 PageObject를 했었어요.
Vue.js를 사용하는 동시에
해봤어
Nightwatch.jsでPageObject
.컨디션
실시된 일
간단한 화면 준비入力して内容を表示する
나는 그것에 대해 테스트 코드를 썼다.
위의 텍스트 상자에 값을 입력하고send
를 클릭한 후
아래 텍스트 상자에 반영합니다.
자기가 말해도 그래요.
진부한 그림이네.
화면과 테스트 코드는 다음과 같다.
테스트 대상 화면
TestTarget.vue<template>
<div>
<section>
<input type="text" name="inputData" v-model="inputData" placeholder="please enter some test!" />
</section>
<section>
<input type="button" value="send" @click="send" />
</section>
<section>
<input type="text" name="resultData" :value="result" />
</section>
</div>
</template>
<script>
export default {
name: 'testTarget',
data () {
return {
inputData: '',
result: 'before'
}
},
methods: {
send: function () {
this.result = this.inputData
}
}
}
</script>
<style scoped>
</style>
테스트 코드
test.jsmodule.exports = {
'input test': function (browser) {
const targetPage = browser.page.testTargetPage()
targetPage.navigate()
.assert.visible('@inputData')
.setValue('@inputData', 'test')
.send()
.assert.value('@resultData', 'test')
browser.end()
}
}
testTargetPage.jsconst pageCommands = {
send: function () {
return this.waitForElementVisible('@sendButton', 1000)
.click('@sendButton')
}
}
module.exports = {
commands: [pageCommands],
url: function () {
return this.api.globals.devServerURL
},
elements: {
inputData: {
selector: 'input[name=inputData]'
},
sendButton: {
selector: 'input[type=button]'
},
resultData: {
selector: 'input[name=resultData]'
}
}
}
nightwatch.conf.jsrequire('babel-register')
var config = require('../../config')
module.exports = {
src_folders: ['test/e2e/specs'],
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
page_objects_path: ['test/e2e/pageObjects'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
디렉토리 구조
project_root
|- src
|- page
|- TestTarget.vue
|- test
|- e2e
|- pageObjects
|- testTargetPage.js
|- specs
|- test.js
|- nightwatch.conf.js
푹 빠진 곳
<template>
<div>
<section>
<input type="text" name="inputData" v-model="inputData" placeholder="please enter some test!" />
</section>
<section>
<input type="button" value="send" @click="send" />
</section>
<section>
<input type="text" name="resultData" :value="result" />
</section>
</div>
</template>
<script>
export default {
name: 'testTarget',
data () {
return {
inputData: '',
result: 'before'
}
},
methods: {
send: function () {
this.result = this.inputData
}
}
}
</script>
<style scoped>
</style>
module.exports = {
'input test': function (browser) {
const targetPage = browser.page.testTargetPage()
targetPage.navigate()
.assert.visible('@inputData')
.setValue('@inputData', 'test')
.send()
.assert.value('@resultData', 'test')
browser.end()
}
}
const pageCommands = {
send: function () {
return this.waitForElementVisible('@sendButton', 1000)
.click('@sendButton')
}
}
module.exports = {
commands: [pageCommands],
url: function () {
return this.api.globals.devServerURL
},
elements: {
inputData: {
selector: 'input[name=inputData]'
},
sendButton: {
selector: 'input[type=button]'
},
resultData: {
selector: 'input[name=resultData]'
}
}
}
require('babel-register')
var config = require('../../config')
module.exports = {
src_folders: ['test/e2e/specs'],
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
page_objects_path: ['test/e2e/pageObjects'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
project_root
|- src
|- page
|- TestTarget.vue
|- test
|- e2e
|- pageObjects
|- testTargetPage.js
|- specs
|- test.js
|- nightwatch.conf.js
.assert.visible('@inputData')
실패!까먹었어
navigate()
, 원래 방문 안 했어testTargetPage.js
에commond를 썼는데 this.waitForElementVisible is not function
!https://github.com/nightwatchjs/nightwatch/issues/1629와 같습니다.목록의 구성은 어떻습니까?
결실
참고할게요.
Reference
이 문제에 관하여(Nightwatch.나는 js에서 PageObject를 시도했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naokiur/items/bb037a289cd6963f5987텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)