반응형
자바 selenium 사용시 새탭을 열고 싶은 경우가 있다.
탭을 여는 방법은 여러가지 있는데 키보드 이벤트를 이용한 경우와 자바스크립트를 이용하는 경우가 있다.
자바스크립트를 이용하는 경우
((JavascriptExecutor) driver).executeScript("window.open()");
위의 방식으로 새탭을 열고, 새탭의 브라우저도 컨트롤 하고 싶은 경우 tab 을 이동해야 한다.
탭을 이동하는 방법은
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); // 탭리스트 가져오기
driver.switchTo().window(tabs.get(1)).navigate().to("https://www.naver.com");
getWindowHandles 로 탭 리스트를 가져와서 원하는 탭 index 로 이동하면 된다. 탭을 새로 만들었으면
driver.switchTo().window(tabs.get(1)).navigate().to("https://www.naver.com"); // 방금만든 1번 탭으로 이동
로 탭 이동 후 새로운 탭에서 이동하고자 하는 url 로 이동하자.
샘플코드
예시로 탭을 새로 만들고 이미 요청했던 화면을 닫는 코드.
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
//Driver SetUp
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
options.setCapability("ignoreProtectedModeSettings", true);
driver = new ChromeDriver(options);
// driver 는 알아서 생성하자.
RemoteWebDriver driver = webdriverExecutor.getWebDriver();
for(int i = 1; i < 100; i ++) {
driver.get("https://juntcom.tistory.com/" + i);
((JavascriptExecutor) driver).executeScript("window.open()"); // 새로운 탭 열기
driver.close(); // 포커스가 첫번째 탭이므로 첫번째 탭이 닫힌다.
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); // 탭리스트
driver.switchTo().window(tabs.get(0)).navigate().to("https://www.naver.com");
// 탭이 2개였지만 close로 한개가 없으므로 현재 탭은 1개 그러므로 0번 탭으로 포커스 후 url 이동하자
}
여기서 driver.close 를 하지 않으면 계속해서 새탭이 만들어질 것이다.
get() 메소드는 현재탭에서 url 변경이다.
키 이벤트로 열기
// Open a new tab
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
컨트롤 T 로 탭을 열 수 있어, 다음과 같이 사용할 수 있다.
반대로 탭을 키 이벤트로 닫을 수도 있다.
Actions action = new Actions(driver);
// Close the newly opened tab
action.keyDown(Keys.CONTROL).sendKeys("w").perform();
// Switch back to original
action.keyDown(Keys.CONTROL).sendKeys("1").perform();
컨트롤 W 는 현재 포커스의 브라우저를 닫는 단축키
컨프롤 숫자는 해당 번호의 순서 탭으로 이동하는 단축키이다.
또한 탭이 많을 경우 제어가 힘들수도 있는데, 원래 탭으로 돌아갈 수 도 있다.
// I had to grab the original handle
String originalHandle = driver.getWindowHandle();
// And switch back to the original handle. I am not sure why, but
// it just did not work without this, like it has lost the focus
driver.switchTo().window(originalHandle);
stackoverflow.com/questions/17547473/how-to-open-a-new-tab-using-selenium-webdriver[새탭열기 및 이동]
반응형
'Java > Java Library' 카테고리의 다른 글
[Java] 자바 selenium 크롤링 - 브라우저 제어하기 (0) | 2021.03.08 |
---|---|
[java] 자바 서버 ip 가져오기 (0) | 2021.02.25 |
XJC(JAXB binding compiler) 로 .xsd 파일을 java 객체로 변환하기 (0) | 2021.02.11 |
[Java] 자바 문자열로 된 수식 계산하기 - 스크립트 엔진 (0) | 2021.02.09 |
[Gson] gson deserialize 파싱사용 이유 및 방법 (0) | 2021.02.01 |