반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함


요즘 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);

이 소스도 아주 기본이 되는 소스네요.


오늘 좀 막혔던 부분을 내일 해결할 수 있을 것 같습니다.

반응형

Comment

이전 1 2 3 4 5 6 7 ··· 29 다음