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

SQA/Automation

Selenium ์—˜๋ฆฌ๋จผํŠธ ์š”์†Œ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ By ์ง€์ •์ž, java

์…€๋ ˆ๋‹ˆ์›€์—์„œ ์›น ์ž๋™ํ™”๋ฅผ ํ•˜๋ฉด์„œ, ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด findElement ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด์ œ findElement ์•ˆ์—๋Š” HTML element์˜ ์š”์†Œ๊ฐ’์„ ์ธ์ž๋กœ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ, HTML element Locator ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, ์ด๊ฒƒ์€ By ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ฟผ๋ฆฌ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

by-class
by-class

By ์ง€์ •์ž?

By Locator ๋ผ๊ณ ๋„ ํ•œ๋‹ค. findElement(), findElements() ๋ฉ”์„œ๋“œ๋Š” By์ง€์ •์ž๋ฅผ ์ธ์ž๋กœ ์ฃผ์–ด ์›น ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์ง€์ •์ž์˜ ์ข…๋ฅ˜๋Š” 8๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ID, Name, ClassName, LinkText, LinkText, LinkText์˜ ์ผ๋ถ€๋ถ„, XPath, CSS ์„ ํƒ์ž์ด๋‹ค.

์ด์ œ ๊ฐ ์ง€์ •์ž์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

 

 

 

By.id()์™€ By.name()

- By.id() : ์›น ์—˜๋ฆฌ๋จผํŠธ์— ID ์†์„ฑ์ด ์žˆ์œผ๋ฉด ๊ฐ ์†์„ฑ์€ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ID๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์•ฑ์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ID๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ”๋€Œ๊ธฐ๋„ ํ•œ๋‹ค. ๋™์ ID๋Š” ์ƒˆ๋กœ๊ณ ์นจ ๋“ฑ์˜ ์•ก์…˜์—๋„ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

 

์–ด๋–ค ์›น ํŽ˜์ด์ง€์—์„œ HTML ์š”์†Œ ์ „์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์™€๋ณด์ž.

<input id="query" name="query" type="text" title="๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ" maxlength="255" class="input_text" tabindex="1"
 accesskey="s" style="ime-mode:active;" autocomplete="off" placeholder="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”." onclick="document
.getElementById('fbm').value=1;" value="" data-atcmp-element="">

์œ„ ์ฝ”๋“œ์—์„œ ๋ฒ„ํŠผ์˜ id๋Š” ‘query’์ด๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ ๋ฒ„ํŠผ์˜ name์€ ‘query’์ด๋‹ค.

 

 

 

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ, ๋„ค์ด๋ฒ„ ํ™ˆํŽ˜์ด์ง€์—์„œ ๊ฒ€์ƒ‰์ฐฝ์„ ์ฐพ์•„์„œ '๊ฐ€๋ฐฉ'์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

 

public void byIdLocatorExample() {

        WebElement searchBox = driver.findElement(By.id("query"));

        searchBox.sendKeys("๊ฐ€๋ฐฉ");
        searchBox.submit();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
 }

 

 

By.className()

๋ณดํ†ต HTML ์—˜๋ฆฌ๋จผํŠธ์—๋Š” ์‚ฌ์šฉ์ž์˜ ์‹œ์„ ์„ ๋Œ๊ธฐ์œ„ํ•œ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์–ด ์žˆ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ์— ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ์ง์ ‘ ์—˜๋ฆฌ๋จผํŠธ ํƒœ๊ทธ์— ์Šคํƒ€์ผ์„ ์„ ์–ธํ•˜๊ฑฐ๋‚˜, CSS ํŒŒ์ผ์„ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด class ์†์„ฑ์œผ๋กœ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์Šคํƒ€์ผ์„ ์ฐธ์กฐํ•˜๋„๋ก ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฒ„ํŠผ์˜ style ์†์„ฑ์„ CSS ํŒŒ์ผ์— ์„ ์–ธํ•œ๋‹ค๊ณ  ํ•˜์ž.

.search-button{
	width : 50px;
	height : 50px;
}

 

์„ ์–ธํ•œ ์Šคํƒ€์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒ„ํŠผ ์—˜๋ฆฌ๋จผํŠธ์— ์ ์šฉ๋œ๋‹ค.

- ์—˜๋ฆฌ๋จผํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ class ์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

- ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ‘button’๊ณผ ‘search-button’ ๋‘ ๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค.

 

๋‘˜ ์ค‘์—์„œ ์œ ์ผํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ชฝ์„ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜์ž.

<button type="submit" title="Search" class="button search-button"><span><span>Search</span></span></button>

 

 

์œ„์— ์„ค๋ช…ํ•œ ๋‚ด์šฉ๊ณผ ํ•ฉ์ณ์„œ, ์›น๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ์„ ์ฐพ์•„ ํด๋ฆญํ•˜๋„๋ก ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

public void byClassNameLocatorExample() {

        WebElement searchBox = driver.findElement(By.id("query"));
        searchBox.sendKeys("๊ฐ€๋ฐฉ");

        WebElement searchButton =
                driver.findElement(By.className("btn_submit"));
        searchButton.click();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
}

 

 

By.linkText()์™€ By.partialLinkText()

By.linkText ์ง€์ •์ž๋Š” HTML ๋งํฌ๋ฅผ ์‹๋ณ„ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ ํ•œ๋‹ค.

๋„ค์ด๋ฒ„ ๋ฉ”์ธ ํŽ˜์ด์ง€์˜ '๋‰ด์Šค' ์—˜๋ฆฌ๋จผํŠธ ์š”์†Œ๋ฅผ ์นดํ”ผํ•ด๋ณด์ž.

naver-news
naver-news

<a href="https://news.naver.com/" class="nav" data-clk="svc.news">๋‰ด์Šค</a>

 

By.linkText ์ง€์ • ๋ฐฉ์‹์€ a ํƒœ๊ทธ์˜ ํ…์ŠคํŠธ('๋‰ด์Šค')๋กœ ์›น ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.

๋„ค์ด๋ฒ„ ๋‰ด์Šค์— ๋ฐฉ๋ฌธํ•ด์„œ ํƒ€์ดํ‹€์ด ๋งž๋Š”์ง€ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

public void byLinkTextLocatorExample() {

        WebElement myAccountLink =
                driver.findElement(By.linkText("๋‰ด์Šค"));

        myAccountLink.click();

        assertThat(driver.getTitle())
                .isEqualTo("๋„ค์ด๋ฒ„ ๋‰ด์Šค");
 }

 

 

By.partialLinkText ์ง€์ •์ž๋Š” ๋งํฌ ํ…์ŠคํŠธ์˜ ์ผ๋ถ€ ๋‹จ์–ด๋งŒ ์•Œ๊ณ  ์žˆ์„๋•Œ, ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„ค์ด๋ฒ„ ๋ฉ”์ธ์˜ '์‡ผํ•‘LIVE'์— ์ง„์ž…ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜๋‹ค.

public void byPartialLinkTextLocatorExample() {

        WebElement orderAndReturns =
                driver.findElement(By.partialLinkText("์‡ผํ•‘L"));

        orderAndReturns.click();

        assertThat(driver.getTitle())
                .isEqualTo("๋„ค์ด๋ฒ„ ์‡ผํ•‘๋ผ์ด๋ธŒ");
 }

 

 

 

By.tagName()

tagName์€ ํƒœ๊ทธ ์ด๋ฆ„์œผ๋กœ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํ™ˆํŽ˜์ด์ง€์—์„œ button ํƒœ๊ทธ๋ช…์œผ๋กœ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ธ๋ฐ, ํ™ˆํŽ˜์ด์ง€์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ„ํŠผ์ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ„ํŠผ์ด ๋ฐ˜ํ™˜๋œ๋‹ค. ์›๋ž˜ ์ด ๊ฒฝ์šฐ์—๋Š” findElements() ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

 

๋„ค์ด๋ฒ„์—์„œ ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ๋กœ ์ด๋™ํ•œ ๋‹ค์Œ > ๋ชจ๋“  a ํƒœ๊ทธ์˜ ๋งํฌ ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž.

public void byTagNameLocatorExample() {

    	WebElement orderAndReturns =
                driver.findElement(By.linkText("๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ"));
        orderAndReturns.click();

        //a ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค.
        List<WebElement> links = driver.findElements(By.tagName("a"));

        System.out.println("Found links:" + links.size());

        // Java 8 Streams API๋กœ ํ•„ํ„ฐ๋งํ•ด์„œ ๋งํฌ ํ…์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ๋งํฌ์˜ ๋งํฌ ํ…์ŠคํŠธ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.
        links.stream()
                .filter(elem -> elem.getText().length() > 0)
                .forEach(elem -> System.out.println(elem.getText()));
        
 }

- ๊ทธ๋ƒฅ ๋„ค์ด๋ฒ„ ๋ฉ”์ธํŽ˜์ด์ง€์—์„œ a ํƒœ๊ทธ๋ฅผ ์ฐพ๋Š” ์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document (Session info: chrome=105.0.5195.125)

ใ„ด ํŽ˜์ด์ง€๋ฅผ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋ถˆ๋Ÿฌ์™€์„œ ์ธ ๊ฒƒ ๊ฐ™์€๋ฐ, ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ๋”ฐ๋กœ ์•Œ์•„๋ณด์ž.

 

 

By.xpath()

xpath๋Š” XML path์˜ ์ค„์ž„๋ง๋กœ XML ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ฟผ๋ฆฌ ์šฉ์–ด์ด๋‹ค.

 

- Xpath ๋ฌธ๋ฒ•

ใ„ด ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ: //

ใ„ด div ์—˜๋ฆฌ๋จผํŠธ: //div

ใ„ด div ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ์žˆ๋Š” link ํƒœ๊ทธ : //div/a

ใ„ด ํƒœ๊ทธ ์•ˆ์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ ๋ชจ๋‘ ์ง€์ • : //div/*

ใ„ด ๋ฃจํŠธ๋ถ€ํ„ฐ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋‚ด๋ ค์˜ค๋Š” div ์—˜๋ฆฌ๋จผํŠธ ์ง€์ • : //*/*/div

ใ„ด ํŠน์ • ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‹๋ณ„ : //*/div/a[@id=’ attrValue’] (์†์„ฑ ๊ฐ’์„ ์‚ฌ์šฉ)

ใ„ด ํ˜„์žฌ ์—˜๋ฆฌ๋จผํŠธ ๋ถ€ํ„ฐ ์ด์–ด์„œ ์‹๋ณ„ : ./div/a/div

 

 

๋ฐ”๋กœ ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž. ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰ ์ฐฝ์„ xpath๋กœ ๊ฐ€์ ธ์™€์„œ '๊ฐ€๋ฐฉ'์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

public void byXPathLocatorExample() {

        WebElement searchBox =
                driver.findElement(By.xpath("//*[@id=\"query\"]"));

        searchBox.sendKeys("๊ฐ€๋ฐฉ");
        searchBox.submit();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
 }

์—˜๋ฆฌ๋จผํŠธ ์‹๋ณ„์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์›น๋“œ๋ผ์ด๋ฒ„๋Š” ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์Šค์บ”ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๊ณผ์ •์€ ๋งค์šฐ ๋น„ํšจ์œจ ์ ์ด๋‹ค. ์ฆ‰, XPath๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋Š” ์ ์  ๋Š๋ ค์ง„๋‹ค.

 

 

 

By.cssSelector()

By.cssSelector() ๋ฉ”์„œ๋“œ๋Š” By.xpath()์™€ ์‚ฌ์šฉ๋ฒ•์ด ๋น„์Šทํ•˜์ง€๋งŒ, ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.

 

- ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•

ใ„ด id๊ฐ€ flrs ์ธ div ์—˜๋ฆฌ๋จผํŠธ : #flrs

ใ„ด ์ฐพ์•„๋‚ธ div์˜ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ์—์„œ, anchor ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‹๋ณ„ : #flrs > a

ใ„ด ๋‹ค์‹œ, ์†์„ฑ ๊ฐ’์œผ๋กœ anchor ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‹๋ณ„ : #flrs > a[a[herf=”/intl/en/about.html”]]

 

 

์œ„์˜ XPath๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ๋ฅผ cssSelector๋กœ ์ง€์ •์ž๋ฅผ ๋ฐ”๊พธ์–ด ์‹คํ–‰ํ•ด๋ณด์ž.

public void byCssSelectorLocatorExample() {

        WebElement searchBox =
                driver.findElement(By.cssSelector("#query"));

        searchBox.sendKeys("๊ฐ€๋ฐฉ");
        searchBox.submit();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
 }

 

 

 

 

 

 

 

 


์ „์ฒด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด์ž.

์ดํด๋ฆฝ์Šค ํ”„๋กœ์ ํŠธ์— TestNG class ์ƒ์„ฑํ•œ ํ›„, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

 
package com.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.SourceType;
import org.testng.annotations.*;

import javax.xml.bind.SchemaOutputResolver;
import java.util.List;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;


public class NaverLocationTest {

    WebDriver driver;

    @BeforeClass
    public void setup() {

        System.setProperty("webdriver.chrome.driver",
                "./src/test/resources/drivers/chromedriver");
        driver = new ChromeDriver();

    }

    @BeforeMethod
    public void navigate() {

        driver.get("https://www.naver.com/");

    }

    @Test
    public void byIdLocatorExample() {

        WebElement searchBox = driver.findElement(By.id("query"));

        searchBox.sendKeys("๊ฐ€๋ฐฉ");
        searchBox.submit();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
    }

    @Test
    public void byClassNameLocatorExample() {

        WebElement searchBox = driver.findElement(By.id("query"));
        searchBox.sendKeys("๊ฐ€๋ฐฉ");

        WebElement searchButton =
                driver.findElement(By.className("btn_submit"));
        searchButton.click();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
    }

    @Test
    public void byLinkTextLocatorExample() {

        WebElement myAccountLink =
                driver.findElement(By.linkText("๋‰ด์Šค"));

        myAccountLink.click();

        assertThat(driver.getTitle())
                .isEqualTo("๋„ค์ด๋ฒ„ ๋‰ด์Šค");
    }

    @Test
    public void byPartialLinkTextLocatorExample() {

        WebElement orderAndReturns =
                driver.findElement(By.partialLinkText("์‡ผํ•‘L"));

        orderAndReturns.click();

        assertThat(driver.getTitle())
                .isEqualTo("๋„ค์ด๋ฒ„ ์‡ผํ•‘๋ผ์ด๋ธŒ");
    }

    @Test
    public void byTagNameLocatorExample() {
    	
    	WebElement orderAndReturns =
                driver.findElement(By.linkText("๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ"));
        orderAndReturns.click();

        //a ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค.
        List<WebElement> links = driver.findElements(By.tagName("a"));

        System.out.println("Found links:" + links.size());

        // Java 8 Streams API๋กœ ํ•„ํ„ฐ๋งํ•ด์„œ ๋งํฌ ํ…์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ๋งํฌ์˜ ๋งํฌ ํ…์ŠคํŠธ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.
        links.stream()
                .filter(elem -> elem.getText().length() > 0)
                .forEach(elem -> System.out.println(elem.getText()));
        
    }

    @Test
    public void byXPathLocatorExample() {

        WebElement searchBox =
                driver.findElement(By.xpath("//*[@id=\"query\"]"));

        searchBox.sendKeys("๊ฐ€๋ฐฉ");
        searchBox.submit();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
    }

    @Test
    public void byCssSelectorLocatorExample() {

        WebElement searchBox =
                driver.findElement(By.cssSelector("#query"));

        searchBox.sendKeys("๊ฐ€๋ฐฉ");
        searchBox.submit();

        assertThat(driver.getTitle())
                .isEqualTo("๊ฐ€๋ฐฉ : ๋„ค์ด๋ฒ„ ํ†ตํ•ฉ๊ฒ€์ƒ‰");
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }
}

 

 

 

pom.xml ํŒŒ์ผ์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>${assertj.version}</version>
</dependency>

 

 

Test All์„ ๋ˆ„๋ฅด๊ณ , ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์ž. 7๊ฐœ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ชจ๋‘ PASS ํ–ˆ๋‹ค.

all-pass
all-pass
 

 

 

 

 

 


ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์€ ๊ธ€

 

Selenium ์›น ์—˜๋ฆฌ๋จผํŠธ ์ฐพ๊ธฐ FindElement , java

์›น ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด์„œ ์›น์—˜๋ฆฌ๋จผํŠธ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์•„์ฃผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์…€๋ ˆ๋‹ˆ์›€์—์„œ๋Š” FindElement, FindElements ๋ฅผ ํ†ตํ•ด ์•„์ฃผ ์‰ฝ๊ฒŒ ์›น ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜์€ ์ด ๋ถ€๋ถ„์„ ํฌ์ŠคํŒ…

dev-yujin.tistory.com