เราสามารถปิดหน้าต่างเฉพาะด้วย 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();
}
} ผลลัพธ์
