디지털 컨버전스/Selenium

[Selenium] 팝업창 제어

gimyeondong 2020. 4. 22. 15:47

getWindowHandles

운영체제에서 부여한 윈도우별 id : 핸들값 핸들id


import java.util.List;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Quiz02 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		ChromeOptions option = new ChromeOptions();
		//		option.addArguments("headless"); // 헤드레스 모드, 창없이 내부적으로 처리
		//		option.addArguments("--blink-setting=imagesEnable=false"); // 페이지 로딩에서 이미지 제외
		//		WebDriver driver = new ChromeDriver(option);

		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,10);
		JavascriptExecutor js = (JavascriptExecutor)driver;

		long startTime = System.currentTimeMillis();

		driver.get("https://front.wemakeprice.com/promotion/3693");
		String defaultWindow = driver.getWindowHandle(); // 윈도우핸들값 저장

		List<WebElement> product_btns = driver.findElements(By.className("flag_wrap"));
		product_btns.get(0).click();

		// 운영체제가 윈도우 별로 id를 부여 : 핸들값 핸들id
		// getWindowHandles : 핸들값을 가져와라
		Set<String> hwnds = driver.getWindowHandles();
		//set 은 순서가 없으므로 foreach로 출력
		System.out.println("Default hwnd : "+defaultWindow);
		for(String hwnd : hwnds) {
			System.out.println(hwnd);
			if(!hwnd.contentEquals(defaultWindow)) { //변경
				driver.switchTo().window(hwnd);
				break;
			}
		}

		List<WebElement> buy_btns = driver.findElements(By.className("btn_sys"));
		buy_btns.get(0).click();

		long endTime = System.currentTimeMillis();
		System.out.println( endTime - startTime );

		Thread.sleep(5000);
		driver.close(); 
	}
}

 

defaultWindow 저장

String defaultWindow = driver.getWindowHandle(); // 윈도우핸들값 저장
		// 운영체제가 윈도우 별로 id를 부여 : 핸들값 핸들id
		// getWindowHandles : 핸들값을 가져와라
		Set<String> hwnds = driver.getWindowHandles();
		System.out.println("Default hwnd : "+defaultWindow);
        
		//set 은 순서가 없으므로 foreach로 출력
		for(String hwnd : hwnds) {
			System.out.println(hwnd);
			if(!hwnd.contentEquals(defaultWindow)) { //변경
				driver.switchTo().window(hwnd);
				break;
			}
		}

새탭으로 이동

import java.util.List;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Quiz02 {
	public static void main(String[] args)  throws Exception {
		System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

		ChromeOptions option = new ChromeOptions();
		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,10);
		JavascriptExecutor js = (JavascriptExecutor)driver;

		long startTime = System.currentTimeMillis();

		driver.get("https://front.wemakeprice.com/promotion/3693");
		String defaultWindow = driver.getWindowHandle(); // 윈도우핸들값 저장

		List<WebElement> product_btns = driver.findElements(By.className("flag_wrap"));
		product_btns.get(0).click();

		// 운영체제가 윈도우 별로 id를 부여 : 핸들값 핸들id
		// getWindowHandles : 핸들값을 가져와라
		Set<String> hwnds = driver.getWindowHandles();
		//set 은 순서가 없으므로 foreach로 출력
		System.out.println("Default hwnd : "+defaultWindow);
		for(String hwnd : hwnds) {
			driver.switchTo().window(hwnd);
			System.out.println(hwnd);
		}

		List<WebElement> buy_btns = driver.findElements(By.className("btn_sys"));
		buy_btns.get(0).click();

		long endTime = System.currentTimeMillis();
		System.out.println( endTime - startTime );

		Thread.sleep(5000);
		driver.close(); 
	}
}