๋ฐ์ํ ๋ฌธ์ (๋๋ WebdriverIO์ ์ถ๊ฐ๋์์ผ๋ฉด ํ๋ ๊ธฐ๋ฅ)๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํฉ๋๋ค. ๋น์ ์ด ๋ฌด์์ ํ๋ ค๊ณ ํ๋์ง์ ๊ทธ ๋์ ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์๋ ค์ฃผ์ญ์์ค. ์ด๊ณณ์ ์ง๋ฌธ์ ํ๋ ๊ณณ์ด _์๋๋๋ค_. ์ด๋ฅผ ์ํด Gitter ์ฑํ ๋ฐฉ( )!
Gitter๋ฅผ ์ฌ์ฉํด ๋ณด์์ง๋ง ์๋ฌด๋ ์๋ตํ์ง ์์์ต๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ํ ๋ฌธ์ ๋ฅผ ๋ ์์ธํ ์ค๋ช ํ์ญ์์ค.
ํ์ด์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ํ ์คํธ๊ฐ ์คํจํ๊ณ ์ถ์ต๋๋ค.
์์? ํ ์คํธ๋ ์ ํต๊ณผํ์ต๋๋ค. ๊ทธ๊ฒ ๋ฌธ์ ์ ๋๋ค.
์ํ ์ฝ๋์ ํจ๊ป ๊ธฐ์ตํ์ญ์์ค. ๋ฒ๊ทธ๋ฅผ ์ฌํํ๊ณ ์์ ํ๋ ๊ฒ์ด ํจ์ฌ ๋น ๋ฆ
๋๋ค.
์๋ง๋ ํ์ด์ง๋ฅผ ๋ก๋ํ๊ณ onload = function () { throw "์ด ํ
์คํธ์ ์คํจํ์ญ์์ค!" }
๊ทธ๋ฐ ๋ค์ ํด๋น ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๋ ํ
์คํธ๋ฅผ ์คํํ๊ณ ์ฝ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ์์ฑ๋๋๋ผ๋ ํ
์คํธ๊ฐ ์ฌ์ ํ ํต๊ณผํ๋์ง ํ์ธํฉ๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ธ ๊ฒ ๊ฐ์ต๋๋ค. .Net ์ ๋ ๋ ์ ํ๊ตฐ์ ์ต์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. PHP์ Codeception์์ ์ ๋ wdio์ ๋ชจ๋ ๋ช ๋ น๊ณผ ๊ฐ์ ๋ชจ๋ "๋จ๊ณ"์ ์ฐ๊ฒฐํฉ๋๋ค. waitFor* ๋๋ getText ๋๋ url() ๋ฐ ๊ฐ ๋จ๊ณ์์ window.onerror๊น์ง ๋ฐ์ํ ์ค๋ฅ๋ฅผ ํ์ธํฉ๋๋ค. wdio์ ๋ชจ๋ ๋จ๊ณ์์ ๊ธฐ๋ฅ์ ์คํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
window.onerror = function () {
document.write('');
}
๊ทธ๋ฌ๋ฉด ๋ค์ ๋จ๊ณ๊ฐ ์คํจํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฝ๊ฐ ์ ๋ขฐํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ๋ฌผ๋ก ๋ค์ ๋ช
๋ น๊ณผ ์ผ์นํฉ๋๋ค.
beforeSuite(() => browser.execute(...));
wdio์ ๋ชจ๋ ๋จ๊ณ์์ ๊ธฐ๋ฅ์ ์คํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์, wdio ํ ์คํธ ๋ฌ๋์๋ ์ด๋ฅผ ์ํํ๋ afterCommand ํํฌ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ์ด๋ฌํ ์ข ๋ฅ์ ์ง๋ฌธ์ ๋ํด. ์ด๊ฒ์ ํ์ํ ๋ฌธ์ ๊ฐ ์๋๋๋ค.
์๋ฒฝํฉ๋๋ค ๊ฐ์ฌํฉ๋๋ค! ํ
์คํธ์ ์คํจํ๋๋ก ๋ด ์๋ฃจ์
์ ๋ค์ ๊ฒ์ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ฌธ์์์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ป์ ์ ์์ ๊ฒ์
๋๋ค!!
์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ ํ ์คํธ์ ์คํจํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ด ์์ต๋๊น?
์ฑํ ์ ์๋ํ์ง๋ง ๋ฌด์๋์์ต๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ด๋ฉฐ ์์ ํ ๋ฌธ์ํ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ ๋๋ค.
๋ค์์ ๋ค๋ฅธ ์ฌ์ดํธ์์ ์ฌ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ ๊ฒ์ฌ๊ธฐ์ด๋ฉฐ Codeception์ ํ์ฌ Angular ๋ฐ wdio์์ ์๋ํฉ๋๋ค.
beforeCommand: function (commandName, args) {
if (browser.getUrl().indexOf(this.baseUrl) > -1) {
browser.execute(function () {
if (window.wdioErrorHandler !== window.onerror) {
const oldHandler = window.onerror;
window.windowErrors = [];
window.onerror = window.wdioErrorHandler = function (err) {
window.windowErrors.push(err + '');
if (typeof oldHandler === 'function') {
oldHandler.apply(this, arguments);
}
}
}
})
}
},
afterCommand: function (commandName, args, result, error) {
if (browser.getUrl().indexOf(this.baseUrl) > -1) {
const errors = browser.execute(function () {
return window.windowErrors;
});
if (errors.value !== null && errors.value.length > 0) {
throw new Error('Javascript errors! ' + errors.value);
}
}
}
afterCommand ๋ธ๋ก์์ ์๋์ ์ผ๋ก ๋ช
๋ น์ ์ด๋ป๊ฒ ์คํจํฉ๋๊น? ํ
์คํธ๊ฐ ์คํจํด์ผ ํ์ง๋ง throw
๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ํ
์คํธ๊ฐ ํต๊ณผํ๋ค๊ณ ํ์๋ฉ๋๋ค.
๋ฌธ์ ์ด๋๊ฐ์ ํํฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ์๋ฅผ ๋ฃ์ ์ ์์ต๋๊น? ๋๋ฒ๊น ์น์ ์ ์์ต๋๊น?
https://www.google.com/search?q=wdio+hooks+example : ์ด ๊ฒ์์ ์ค์ ๋ก ๋์์ด ๋๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์ง ์์ต๋๋ค.