WEB自動化(JAVA版)——特殊元素定位與操作-window

特殊元素定位與操作-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();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章