特殊元素定位與操作-window
當要操作另外一個窗口頁面的元素時,一定要注意先切換窗口。
切換方式:傳入要操作窗口的name或者句柄handle
driver.switchTo.window(nameOrHandle);
如何獲取到窗口的句柄
- driver.getWindowHandle();//獲取當前操作窗口的句柄
- driver.getWindowHandles();//獲取測試時打開的所有窗口句柄
代碼示例
雖然頁面已經到了B窗口,但是句柄還是在a窗口中,所以你操作的還是a窗口
package com.test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class SpecialElementLocate {
private static ChromeDriver chromeDriver;
public static void main(String[] args) throws InterruptedException {
//window處理
//訪問本地HTML文件
chromeDriver.get("D:\\window\\a.html");
//點擊按鈕
chromeDriver.findElement(By.id("aa")).sendKeys("這是第一個窗口");
System.out.println("跳轉前的窗口句柄:"+chromeDriver.getWindowHandle());
Thread.sleep(2000);
//切換到B窗口
chromeDriver.findElement(By.id("bb")).click();
//雖然頁面已經到了B窗口,但是句柄還是在a窗口中,所以你操作的還是a窗口
Thread.sleep(2000);
System.out.println("跳轉後的窗口句柄:"+chromeDriver.getWindowHandle());
}
public static void openChrome() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
//1.打開Chrome瀏覽器
chromeDriver = new ChromeDriver();
}
}
切換句柄
package com.test;
import java.util.Set;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class SpecialElementLocate {
private static ChromeDriver chromeDriver;
public static void main(String[] args) throws InterruptedException {
//window處理
//訪問本地HTML文件
chromeDriver.get("D:\\window\\a.html");
//點擊按鈕
chromeDriver.findElement(By.id("aa")).sendKeys("這是第一個窗口");
System.out.println("跳轉前的窗口句柄:"+chromeDriver.getWindowHandle());
Thread.sleep(2000);
//切換到B窗口
chromeDriver.findElement(By.id("bb")).click();
//雖然頁面已經到了B窗口,但是句柄還是在a窗口中,所以你操作的還是a窗口
Thread.sleep(2000);
System.out.println("跳轉後的窗口句柄:"+chromeDriver.getWindowHandle());
//句柄的切換
//進入到b窗口之後,獲取到所有窗口的句柄
Set<String> handles = chromeDriver.getWindowHandles();
//對窗口集合進行遍歷
for(String handle : handles) {
//切換句柄
chromeDriver.switchTo().window(handle);
//??我怎麼知道b窗口的句柄呢?
if(chromeDriver.getTitle().equals("b.html")) {
//如若標題是符合的話,就跳出循環
break;
}
}
chromeDriver.findElement(By.id("bb")).sendKeys("這是第二個窗口");
}
public static void openChrome() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
//1.打開Chrome瀏覽器
chromeDriver = new ChromeDriver();
}
}