Webdriverio: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์กฐ์–ธ

์— ๋งŒ๋“  2017๋…„ 08์›” 08์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: webdriverio/webdriverio

๋ฌธ์ œ

๋ฐœ์ƒํ•œ ๋ฌธ์ œ(๋˜๋Š” WebdriverIO์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๊ธฐ๋Šฅ)๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”์ง€์™€ ๊ทธ ๋Œ€์‹ ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ์ด๊ณณ์€ ์งˆ๋ฌธ์„ ํ•˜๋Š” ๊ณณ์ด _์•„๋‹™๋‹ˆ๋‹ค_. ์ด๋ฅผ ์œ„ํ•ด Gitter ์ฑ„ํŒ…๋ฐฉ(Gitter )!

Gitter๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์ง€๋งŒ ์•„๋ฌด๋„ ์‘๋‹ตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ

์„ธ๋ถ€

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.

ํŽ˜์ด์ง€์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Selenium/WebdriverIO ๋กœ๊ทธ์— ๋Œ€ํ•œ ๋งํฌ

์—†์Œ? ํ…Œ์ŠคํŠธ๋Š” ์ž˜ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ [ ์žˆ์œผ๋ฉด ์ข‹์€ ]

์ƒ˜ํ”Œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.
์•„๋งˆ๋„ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ  onload = function () { throw "์ด ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜์‹ญ์‹œ์˜ค!" }
๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ฝ˜์†”์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ์ƒ์„ฑ๋˜๋”๋ผ๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. .Net ์…€๋ ˆ๋Š„ ์ œํ’ˆ๊ตฐ์— ์˜ต์…˜์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PHP์™€ Codeception์—์„œ ์ €๋Š” wdio์˜ ๋ชจ๋“  ๋ช…๋ น๊ณผ ๊ฐ™์€ ๋ชจ๋“  "๋‹จ๊ณ„"์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. waitFor* ๋˜๋Š” getText ๋˜๋Š” url() ๋ฐ ๊ฐ ๋‹จ๊ณ„์—์„œ window.onerror๊นŒ์ง€ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. wdio์˜ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

window.onerror = function () {
document.write('');
}

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์•ฝ๊ฐ„ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋ฌผ๋ก  ๋‹ค์Œ ๋ช…๋ น๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

beforeSuite(() => browser.execute(...));

wdio์˜ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, wdio ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ์—๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” afterCommand ํ›„ํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜Gitter ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•ด. ์ด๊ฒƒ์€ ํ•„์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋„๋ก ๋‚ด ์†”๋ฃจ์…˜์„ ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ๋ฌธ์„œ์—์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!!

์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฑ„ํŒ…์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด๋ฉฐ ์™„์ „ํžˆ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ๊ธฐ์ด๋ฉฐ 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 : ์ด ๊ฒ€์ƒ‰์€ ์‹ค์ œ๋กœ ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰