반응형
요즘 Selenium WebDriver로 작업하는 웹 어플리케이션은 새로운 창을 아주 많이 열었다 닫았다 합니다.
그래서 테스트 케이스를 작성하다 보면 창을 옮겨 다녀야 되는 일이 많은데요.
브라우저들을 옮겨 다니는 방법을 확실하게 알아두기 위해서 구글링해서 몇개 소스를 분석해 보겠습니다.
//Store the current window handle
String winHandleBefore = driver.getWindowHandle();
//Perform the click operation that opens new window
//Switch to new window opened
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}
// Perform the actions on new window
//Close the new window, if that window no more required
driver.close();
//Switch back to original browser (first window)
driver.switchTo().window(winHandleBefore);
//continue with original browser (first window)
이 소스가 가장 기본적인 소스인것 같습니다.
winHandleBefore 이라는 변수에 현재의 윈도우를 등록해 넣습니다.
그리고 for 문에서 현재 열려 있는 창들을 확인해서 switchTo를 합니다.
이러면 브라우저를 옮긴 겁니다.
다시 원래 브라우저로 돌아오려면 아까 parent 윈도우를 저장해 뒀던 변수로 다시 switchTo()를 해 주면 됩니다.
그런데 parent 윈도우가 있고 여기서 child 윈도우를 열었는데 이 child 윈도우에서 다시 또 child 윈도우를 여는 경우가 있습니다.
그러면 처음에
parent 윈도우를 변수에 담고 새창(2)을 엽니다.
그리고 새창(2)에서 다시 새창(3)을 열기 전에 새창(2)를 다른 변수에 담습니다.
그리고 원하는 창으로 다시 switchTo를 하면 되겠죠.
그런데 소스들을 찾다 보니까 좋은 코드가 있네요.
private void handleMultipleWindows(String windowTitle) {
Set<String> windows = driver.getWindowHandles();
for (String window : windows) {
driver.switchTo().window(window);
if (driver.getTitle().contains(windowTitle)) {
return;
}
}
}
새창의 Title을 가지고 그 창으로 switchTo 하는 겁니다.
이러면 굳이 창을 변수에 담지 않아도 원하는 때에 원하는 창으로 간단하게 switchTo를 할 수 있겠네요.
내일 사무실에 가서 지금 일하고 있는 소스에 적용해 봐야 겠습니다.
String parentWindow= driver.getWindowHandle();
List<String> allWindows = driver.getWindowHandles(); for(String curWindow : allWindows){ driver.switchTo().window(curWindow); }
driver.close();
driver.switchTo().window(parentWindow);
이 소스도 아주 기본이 되는 소스네요.
오늘 좀 막혔던 부분을 내일 해결할 수 있을 것 같습니다.
반응형
'TDD Project > Selenium Web Driver' 카테고리의 다른 글
Page Object Design Pattern (1) | 2014.08.01 |
---|---|
[Java] String split() Method 관련해서. - Selenium WebDriver - (0) | 2014.03.12 |
[Selenium] Double Click and Execute JavaScript -Tip - (0) | 2014.02.13 |
[Selenium] 유저가 입력한 정보 관리자 모드에서 확인하는 테스트 만들기 (0) | 2014.02.03 |
[Selenium] 두개의 시나리오나 여러 브라우저 작업을 한개의 suite 로 처리하기 (1) | 2014.02.02 |
[Selenium] IE 브라우저 사용할 때 지켜야 할 점들 (2) | 2014.01.27 |
[Selenium] Select Option 관련 로직 정리 (0) | 2014.01.27 |
Selenium WebDriver 작업시 유용한 로직 - Pagination 등 (1) | 2013.12.16 |
Selenium WebDriver - Alert Control, Escape key (0) | 2013.12.06 |
Selenium Webdriver - iframe 사용하기 (2) | 2013.12.05 |