๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SQA/Automation

(23)
Selenium ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ ์‚ฌ์šฉ๋ฒ• Headless Mode ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณธ ์‚ฌ๋žŒ์€ ์•Œ๊ฒ ์ง€๋งŒ, ํ•œ ๋ฒˆ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‹ค์ œ ์›น ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ๋งค๋ฒˆ ์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ด ์›นํŽ˜์ด์ง€๋ฅผ ๋„์šฐ์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋•Œ ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ ์›น๋“œ๋ผ์ด๋ฒ„ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ƒ๋‹นํžˆ ์œ ์šฉํ•˜๋‹ค. ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด์„œ๋„ UI๊ฐ€ ๋ณด์ด์ง€ ์•Š์•„ ๋น ๋ฅด๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. CI(์ง€์†์  ํ†ตํ•ฉ)ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๋‹ค. ๋‚˜์ค‘์— ํ…Œ์ŠคํŠธ ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ ์šฉํ•  ๋•Œ๋Š” ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค. Chrome ์—์„œ ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ ์‚ฌ์šฉ ChromeOptions ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ setHeadless() ๋ฉ”์„œ๋“œ๋ฅผ true๋กœ ์„ค์ •..
Selenium ์—˜๋ฆฌ๋จผํŠธ์˜ ์ƒํƒœ ํ™•์ธ, ํ™œ์„ฑํ™” ๋น„ํ™œ์„ฑํ™” ํด๋ฆญ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ˜„์žฌ ์›น์—˜๋ฆฌ๋จผํŠธ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ 3๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค. java์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์ ์–ด๋‘์—ˆ๋‹ค. ์•„๋ž˜์˜ ์„ธ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ๋ณด์ด๋Š”์ง€, ํด๋ฆญ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€, ์„ ํƒ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. isDisplayed() ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๊ณ , ์•ก์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํŽ˜์ด์ง€์— ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์ด๊ฒŒ ํŽ˜์ด์ง€์— ๋ณด์ด๋Š”๊ฐ€ ์ด๋‹ค. ํŽ˜์ด์ง€์— ๋ณด์—ฌ์•ผ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ click ํ•  ์ˆ˜ ์žˆ๋‹ค. isEnabled() ๋Œ€์ƒ ์—˜๋ฆฌ๋จผํŠธ์˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ž‘ ํด๋ฆญ(click) ๋™์ž‘์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ๊ฐ€๋ฅผ ๋งํ•œ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋ณด์ด๋ฉด์„œ, ํ™œ์„ฑํ™”๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉด ํด๋ฆญ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, isDispl..
Selenium ์‚ฌ์šฉ์ž ์•ก์…˜ ์‹คํ–‰ sendKey clear submit ์›น ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ์•ก์…˜์„ ์ทจํ•˜๊ฒŒ ํ•ด์•ผ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ์— ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์•ก์…˜์„ ์•Œ์•„๋ณด์ž. ์›น ์—˜๋ฆฌ๋จผํŠธ๋งˆ๋‹ค ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์•ก์…˜์ด ๋‹ค๋ฅด๋‹ค. ํ…์ŠคํŠธ ๋ฐ•์Šค ์—˜๋ฆฌ๋จผํŠธ์—๋Š” ๋ฌธ์ž ์ž…๋ ฅ, ๋ฌธ์ž ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฒ„ํŠผ ์—˜๋ฆฌ๋จผํŠธ์—๋Š” ํด๋ฆญ, ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์›น ์—˜๋ฆฌ๋จผํŠธ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์•ก์…˜์„ ๋„ฃ๋”๋ผ๋„, ์›น๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ฌด์‹œํ•œ๋‹ค. (์˜ค๋ฅ˜ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.) ์›น ์—˜๋ฆฌ๋จผํŠธ์—์„œ ์•ก์…˜ ์‹คํ–‰ ์›น ์—˜๋ฆฌ๋จผํŠธ์— ์‚ฌ์šฉ์ž ์•ก์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ž๋™ํ™” ์ž‘์—…์˜ ํ•ต์‹ฌ์ด๋‹ค. ์ž๋™ํ™”๋Š” ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ์„œ ์ปดํ“จํ„ฐ๊ฐ€ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ์šฉ์ž ์•ก์…˜์— ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ์•„๋ณด์ž. ๋„ค์ด๋ฒ„ ๋ฉ”์ธ ํ™ˆํŽ˜์ด์ง€์˜ ๊ฒ€์ƒ‰์ฐฝ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ..
Selenium ์—˜๋ฆฌ๋จผํŠธ ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ HTML get ์†์„ฑ , java ํ…Œ์ŠคํŠธ๋ฅผ ์›ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ํŠน์ •ํ•œ Attribute, Text, Size, CssSelector ๋“ฑ์˜ ์†์„ฑ๋“ค์„ ์•Œ์•„์•ผํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž. getAttribute() getAttribute() ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ์›น ์—˜๋ฆฌ๋จผํŠธ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ์†์„ฑ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด ํƒ€์ž…์˜ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. ๋ฐ˜ํ™˜ ํƒ€์ž…๋„ ์†์„ฑ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์•„๋ž˜๋Š” ๋„ค์ด๋ฒ„ ํ™ˆํŽ˜์ด์ง€์˜ ๊ฒ€์ƒ‰ ํ•„๋“œ(์ž…๋ ฅ์ฐฝ) Element์ด๋‹ค. ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์˜ ์†์„ฑ๊ฐ’์„ ์•Œ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. public void elementGetAttributesExample() { WebElement searchBox = driver.findElement(By.name("query")); System.out.p..