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

SQA/Automation

Selenium ๋ธŒ๋ผ์šฐ์ € ์œˆ๋„์šฐ ์ฐฝ iframe ํฌ์ปค์‹ฑ ๋ฐฉ๋ฒ• , java

์›น์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•  ๋•Œ, ์šฐ๋ฆฌ๋Š” ํ•œ ๊ฐœ์˜ ์ฐฝ๋งŒ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์ƒˆ์ฐฝ์œผ๋กœ ๋งํฌ๊ฐ€ ์ด๋™๋œ ๊ฒฝ์šฐ, ๊ทธ ์ฐฝ์—์„œ์˜ ๋™์ž‘์„ ๋งˆ์น˜๋ฉด ์ด์ „ ์ฐฝ์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ํฌ์ปค์‹ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ฒˆ์—๋Š” ์œˆ๋„์šฐ ์ฐฝ๊ณผ iFrame ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

 

 

์œˆ๋„์šฐ-iframe-์ง€์ •-๋ฐฉ๋ฒ•
์œˆ๋„์šฐ iframe ์ง€์ • ๋ฐฉ๋ฒ•

 

 

 

์œˆ๋„์šฐ ์ฐฝ๊ณผ iFrame ์ง€์ •

์›น๋“œ๋ผ์ด๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์—ด๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ์œˆ๋„์šฐ ์ฐฝ, ๋ธŒ๋ผ์šฐ์ € ํƒญ, ํ”„๋ ˆ์ž„ ์‚ฌ์ด๋ฅผ ์ด๋™(ํฌ์ปค์‹ฑ)ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์˜ˆ์‹œ๋กœ, ์€ํ–‰์ด๋‚˜ ๋ธ”๋กœ๊ทธ ์›น์—์„œ ๋งํฌ๋ฅผ ํด๋ฆญํ•ด ์ƒˆ์ฐฝ์„ ์—ด์—ˆ๋‹ค๊ฐ€, ๋‹ค์‹œ ์ด์ „ ์ฐฝ์œผ๋กœ ๋Œ์•„๊ฐ€์•ผํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, ํ”„๋ ˆ์ž„์„ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ  ์™ผ์ชฝ ํ”„๋ ˆ์ž„์—๋Š” ์•„์ดํ…œ ๋ชฉ๋ก์ด ์žˆ๊ณ , ์˜ค๋ฅธ์ชฝ ํ™”๋ฉด์—๋Š” ์•„์ดํ…œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ์›น ํŽ˜์ด์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์…€๋ ˆ๋‹ˆ์›€ ์›น๋“œ๋ผ์ด๋ฒ„๋กœ ์œ„ ์˜ˆ์‹œ๋“ค์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” WebDriver.TargetLocator ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ”„๋ ˆ์ž„์ด๋‚˜ ์œˆ๋„์šฐ ์ฐฝ์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์œˆ๋„์šฐ ์ฐฝ ์ „ํ™˜ํ•˜๊ธฐ

TargetLocator()

TargetLocator()์˜ API ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ฐ˜ํ™˜๊ฐ’์€ WebDriver.TargetLocator ์ธ์Šคํ„ด์Šค์ด๋‹ค.

WebDriver.TargetLocator switchTo()

 

๋„ค์ด๋ฒ„ ํ™ˆ์— ์ง„์ž… > ๋„ค์ด๋ฒ„ ํ™ˆ ํ•˜๋‹จ(footer)์— NAVER Corp ๋งํฌ์— ์ง„์ž… > ๋‹ค์‹œ ๋„ค์ด๋ฒ„ ํ™ˆ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ํ–‰๋™์„ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

@Test
public void HandleWindow() {
	String firstWindow = driver.getWindowHandle();
	System.out.println("์ฒซ๋ฒˆ์งธ ์œˆ๋„์šฐ ํ•ธ๋“ค์€? : " + firstWindow);
		  
	WebElement link = driver.findElement(By.linkText("โ“’ NAVER Corp."));
	link.click();
		  
	String secondWindow = driver.getWindowHandle();
	System.out.println("๋‘๋ฒˆ์งธ ์œˆ๋„์šฐ ํ•ธ๋“ค์€? : " + secondWindow );
		  
	System.out.println("์œˆ๋„์šฐ ํ•ธ๋“ค์˜ ์ˆ˜๋Š” ? : " + 
							driver.getWindowHandles().size());
		  
	driver.switchTo().window(firstWindow);
	  
}

@BeforeMethod
public void beforeMethod() throws IOException {
	System.setProperty("webdriver.chrome.driver", 
			"./src/test/resources/drivers/chromedriver");
		  
	driver = new ChromeDriver();
	  
	driver.get("http://www.naver.com/");
}
 
์ดํด๋ฆฝ์Šค-์ฝ˜์†”-๊ฒฐ๊ณผ๊ฐ’
์ดํด๋ฆฝ์Šค ์ฝ˜์†” ๊ฒฐ๊ณผ๊ฐ’

 

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ์ดํด๋ฆฝ์Šค์— ์ถœ๋ ฅ๋˜๋Š” ์ฝ˜์†” ๊ฐ’์€ ์œ„์™€ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์œ„ ์˜ˆ์ œ์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

String firstWindow = driver.getWindowHandle();

๋‹ค๋ฅธ ์œˆ๋„์šฐ์— ๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์˜ฌ ๊ฒƒ์„ ๋Œ€๋น„ํ•˜์—ฌ ํ•ธ๋“ค์„ ์ €์žฅํ•ด ๋‘”๋‹ค.

 

driver.getWindowHandles()

๋“œ๋ผ์ด๋ฒ„์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ๊ฐ€์ ธ์™€ Set ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด ์ค€๋‹ค.

 

 

ํ”„๋ ˆ์ž„ ๊ฐ„ ์ „ํ™˜

์ด์ œ ๋‹ค์Œ์€ ์›นํŽ˜์ด์ง€์˜ ํ”„๋ ˆ์ž„์„ ์ „ํ™˜ํ•ด ๋ณด์ž.

 

์ด ์˜ˆ์ œ ํŽ˜์ด์ง€(๋งํฌ)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์˜ˆ์ œ ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฐ ํ”„๋ ˆ์ž„์ด ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•˜๊ณ  ์žˆ๋‹ค.

 

@Test
public void FrameHandler() throws IOException {
	  
	  //์ฒซ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„
	  driver.switchTo().frame(0);
	  WebElement firstField = driver.findElement(By.name("1"));
	  firstField.sendKeys("๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„์ด๋‹ค!!");
	  
	  driver.switchTo().defaultContent();
	  
	  //๋‘ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„
	  driver.switchTo().frame(1);
	  WebElement secondField = driver.findElement(By.name("2"));
	  secondField.sendKeys("๋‚˜๋Š” ๋‘ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„์ด๋‹ค!!");
	  
}

@BeforeMethod
public void beforeMethod() {
	  
	  System.setProperty("webdriver.chrome.driver", "./src/test/resources/drivers/chromedriver");
	  
	  driver = new ChromeDriver();
	  driver.get("http://guidebook.seleniumacademy.com/Frames.html");
	  
}

 

driver.switchTo().frame(0);

์›น ํŽ˜์ด์ง€๊ฐ€ 3๊ฐœ์˜ ํ”„๋ ˆ์ž„์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฉด 0,1,2 ๊ฐ€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ ํ• ๋‹น๋œ๋‹ค. ์ธ๋ฑ์Šค 0์€ DOM์—์„œ ๋งŒ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„์ด๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ๋Š” ํ”„๋ ˆ์ž„ ์ด๋ฆ„์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ์˜ค๋ฒ„๋กœ๋“œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋ฅด๋ฉด ์ด๋ฆ„์œผ๋กœ๋„ ํ”„๋ ˆ์ž„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

WebElement frame(WebElement FrameElement)

 

 

์—ฌ๊ธฐ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์„ ์ด๋™ํ•˜๊ธฐ ์ „์—, ๋””ํดํŠธ ์ฝ˜ํ…์ธ ๋กœ ์ด๋™ํ•œ ๋‹ค์Œ์— ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ์ค€(๋””ํดํŠธ) ํ”„๋ ˆ์ž„์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

driver.switchTo().defaultContent();

 

 

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์…€๋ ˆ๋‹ˆ์›€ ์Šคํฌ๋ฆฐ์ƒท ๊ธฐ๋Šฅ(๋งํฌ) ์œผ๋กœ ์บก์ณํ•ด๋ณด์•˜๋‹ค.

 

์˜ˆ์ œ-์ฝ”๋“œ-์‹คํ–‰- ๊ฒฐ๊ณผ
์˜ˆ์ œ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ

 

 

 


 

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

 

Selenium ํ…Œ์ŠคํŠธ ์‹คํŒจ ์ˆœ๊ฐ„ ์Šคํฌ๋ฆฐ์ƒท ์บก์ณ ๋ฐฉ๋ฒ• java

ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ, ๋ณดํ†ต์€ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•œ ํ›„, quit() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ driver๋ฅผ ์ข…๋ฃŒํ•˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค. (์ด๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ๋๋‚ด๊ณ  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ข…๋ฃŒํ•ด์•ผ

dev-yujin.tistory.com