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

최근에 받은 트랙백

글 보관함


Handling iFrames using WebDriver


inline frame은 현재의 HTML 문서 내에 다른 문서를 넣을 때 사용됩니다. 즉 iframe은 웹페이지 안에 있는 웹페이지를 말하는거죠. iframe은 별도로 DOM을 가지고 있습니다.

iframe을 사용하는 HTML 소스코드는 아래와 같이 사용하시면 됩니다





위의 코드를 보면 iframe안에 또 다른 iframe이 있는 걸 보실 수 있을 겁니다. 안쪽의 iframe으로 가려면 바깥쪽의 iframe 을 지나가야 되고 또 그 안쪽의 iframe 안에도 body가 있습니다.

그리고 나서 다시 안쪽의 iframe은 을 나와서 바깥쪽 iframe 까지 나오면 이제 OK 버튼을 보게 됩니다. 테스트를 작성하려면 이 과정을 거쳐야 합니다. iframe 안에 있는 element에 직접 접근하는 것은 가능하지 않습니다. iframe은 자신만의 DOM element를 가지고 있어서 그 안의 element들을 다루려면 switch to 를 해서 접근해야 합니다.


Selects the frame 1

driver.switchTo().frame("frame1");

Selects the frame2

driver.switchTo().frame("frame2");

Switching back to the parent window

driver.switchTo().defaultContent(); // 이제 iframe 바깥으로 완전히 빠져 나온 겁니다.

iframe의 value를 알지 못할 때도 있는데요. 그럴 때는 아래와 같이 tagName 메소드를 사요ㅇ해서 그 name을 얻을 수 있습니다.

driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(0));



아래 메소드를 사용해서 iframe을 선택하실 수 있습니다.

    frame(index)
    frame(Name of Frame [or] Id of the frame
    frame(WebElement frameElement)
    defaultContent()


반응형

Comment

  1. yonoo 2015.01.16 06:50 신고

    ;; 코드 쓰려니까 금칙어가 있따고 자꾸 안되네요...
    요즘 webdriver를 해보고 있는데 버튼 클릭이 안되서 질문이 있습니다.

    네이버 지식인에서 질문하기를 들어가면
    질문 작성화면 아래에 임시저장 버튼이 있거든요 그거를 .click(); 하려고 하는데 id는 없고 div 클래스 네임 뭐 이것저것 다해봤는데도 클릭이 안되네요..;;
    어떻게 해줘야 할지 모르겠습니다.

    네이버 지식인에서 질문하기 들어가면 질문작성화면 아래에 임시저장 버튼입니다.

    • 솔웅 2015.01.21 10:22 신고

      제가 자세하게 소스코드를 살펴볼 시간이 없네요. 죄송;;;
      경험상 볼 때 frame이나 inner frame 이 나눠지지 않았나 살펴보시고...
      class 나 ID가 안되면 xpath 를 사용해 보시구요.
      가장 먼저 디버깅부터 해 보시는게 바람직할 것 같네요.
      특정 API 의 클래스가 작동 안 할 수도 있으니까 class 이름을 display 해 보시는 방법도 있구요.
      아 그리고 같은 이름의 class가 여러개 있을 수 있으니까 그것도 살펴 보셔야 될 수도 있어요. 만약에 같은 이름의 클래스가 여러개 있으면 리스트에 담아서 루프를 돌린 다음에 해당 element를 click 하도록 해야 됩니다.
      여러 경우의 수가 있습니다. 하나 하나 해결 해 나가면 그게 실력이 되는 것입니다. 부디 잘 해결하시기를 바라겠습니다.