เราสามารถปิดหน้าต่างเฉพาะด้วย Selenium webdriver getWindowHandles และ getWindowHandle สามารถใช้วิธีการจัดการกับหน้าต่างลูก เมธอด getWindowHandles ใช้เพื่อจัดเก็บที่จับหน้าต่างที่เปิดอยู่ทั้งหมดในโครงสร้างข้อมูล Set
เมธอด getWindowHandle ใช้เพื่อจัดเก็บหมายเลขอ้างอิงหน้าต่างของหน้าต่างเบราว์เซอร์ให้อยู่ในโฟกัส เราต้องเพิ่ม นำเข้า java.util.Set และ นำเข้า java.util.List คำสั่งเพื่อรองรับโครงสร้างข้อมูล Set ในโค้ดของเรา
โดยค่าเริ่มต้น ออบเจ็กต์ไดรเวอร์จะสามารถเข้าถึงองค์ประกอบต่างๆ ของหน้าต่างหลักเท่านั้น เพื่อที่จะเปลี่ยนโฟกัสจากหน้าต่างหลักไปที่หน้าต่างลูก เราจะใช้ความช่วยเหลือของ switchTo().window เมธอดและส่ง ID ตัวจัดการหน้าต่างของหน้าต่างลูกเป็นอาร์กิวเมนต์ของเมธอด จากนั้นหากต้องการย้ายจากหน้าต่างย่อยไปยังหน้าต่างหลัก เราจะใช้ switchTo().window เมธอดและส่ง ID ตัวจัดการหน้าต่างหลักเป็นอาร์กิวเมนต์ไปยังเมธอด
ตัวอย่าง
การติดตั้งโค้ด
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; import java.util.List; import java.util.Set; public class CloseSpecificWindow { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://secure.indeed.com/account/login"); //implicit wait driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //window handle of parent window String m = driver.getWindowHandle(); driver.findElement(By.id("login-google-button")).click(); // store window handles in Set Set w = driver.getWindowHandles(); // iterate window handles for (String h: w){ // switching to each window driver.switchTo().window(h); String s= driver.getTitle(); // checking specific window title if(s.equalsIgnoreCase("Sign in - Google Accounts")){ System.out.println("Window title to be closed: "+ driver.getTitle()); driver.close(); } } // switching parent window driver.switchTo().window(m); driver.quit(); } }
ผลลัพธ์