2016-09-29 1 views
0

웹 드라이버를 사용하여 Selenium 테스트를 실행하고 있습니다.여러 브라우저에서 새 탭/창 동작을 동일하게 유지하려면 어떻게합니까?

브라우저에서 새 탭이나 새 창을 열려고하면 테스트 할 브라우저에 따라 동작이 달라집니다.

다음은 내가 사용하는 방법입니다. 코드는 새 창 대신 새 탭과 동일합니다. "n"대신 "t"키를 누르면됩니다.

protected void logOutInAnotherTab() { 
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "n"); 
    List<String> tabs = new ArrayList<>(driver.getWindowHandles()); 
    driver.switchTo().window(tabs.get(1)); 
    PageObject.logout(driver); 
    PageUtil.waitForPageLoad(driver, 3); 
    driver.close(); 
    driver.switchTo().window(tabs.get(0)); 
} 

그런 다음 (원래 탭/창으로 전환) 탭/창을 닫습니다, (사용자의 세션을 종료하는) 로그 아웃 URL로 이동, 새 탭/창을 열고 그것으로 전환하도록되어 , 사용자 세션이 끝나고 테스트 케이스가 진행될 수있게한다.

내가 탭용으로 수행하는 경우 Firefox와 IE는 모두 driver.getWindowHandles()을 호출하면 원래 탭만 반환하므로 다음 줄에 범위를 벗어나는 색인이됩니다. 즉, 새 탭이 웹 드라이버에 의해 인식되지 않기 때문에 전환이 실패합니다.

내가 윈도우즈 용이라면, 똑같은 문제가있다.하지만 IE에만 ​​문제가있다. 파이어 폭스 웹 드라이버는 두 윈도우 모두 잘 처리한다. 또한 IE는 시작 페이지 또는 홈 페이지 대신 원본 창과 동일한 페이지를로드하므로 추가 문제가 발생합니다.

모든 경우에 Chrome이 예상대로 작동하도록 할 수 있습니다.

여러 개의 탭 또는 창을 처리 할 때 세 가지 데스크탑 브라우저 (IE, Firefox 및 Chrome)가 모두 동일하게 작동하도록하려면 어떻게해야합니까?

또는 내 필요에 따라 세 가지 브라우저에서 새 탭/창을 열고 해당 탭/창으로 전환 한 다음 나중에 탭/창을 닫고 원래 탭으로 다시 전환 할 수 있습니까?

답변

0

기본적으로 탭 이름을 기준으로 탭을 전환합니다. 다음은 제 코드입니다.

public void SwitchTo(String tabName) { 

     String currentHandle = driver.getWindowHandle(); 
     Set<String> set = driver.getWindowHandles(); 

     for (String s : set) { 

      if (currentHandle.equals(s)) { 
       continue; 
      } 

      driver.switchTo().window(s); 

      if (driver.getTitle().equals(tabName)) { 
       break; 
      } 
     } 
    } 

참고 : 드라이버 초기화없이 내 로컬 방법을 제공 했으므로 "드라이버는 무엇입니까?"라는 것을 알지 못합니다. 내가 탭을 위해 그것을 할 경우

는 파이어 폭스와 IE 모두 내가 getWindowHandles은 원래 탭을 반환하는 경우 나,이 어쩌면 인해를 볼 수 있듯이 driver.getWindowHandles()

를 호출은 원래 탭을 반환 버전에.

Firefox does not list tabs in getAllWindowHandles

+0

이 문제는 해결되지 않습니다. IE와 Firefox의 경우'driver.getWindowHandles()'는 하나의 항목 만있는 Set를 반환합니다. 원래 탭/창 그 Set을 반복하면 마법 적으로 다른 탭/창을 추가하지 않습니다. –

관련 문제