先來解釋下什么是句柄,有時候瀏覽器的窗口句柄,也叫windows id,英文單詞更好理解。
你打開了一個瀏覽器,你開一個tab,就生成了一個id,這個id直到你關閉這個tab才會消失。
如果你在一個瀏覽器上打開多個tab,那么就有多個windows id,為什么你關閉其中一個tab,但是不影響其他tab的顯示,就是這個id的作用。
本文就是要介紹如何獲得瀏覽器窗體的句柄或者叫編號,為后面的driver實例在多個窗體之間切換做准備。
我們先看看瀏覽器只開一個tab,也就是只有一個windows句柄的時候,打印出這個句柄出來。
==========================================================================================================
打印結果像這樣:CDwindow-e3655cc7-5cc1-42cc-a3d0-0d6339d1cfab
這個id是每次啟動都變化的,所以,你打印和我打印出來的肯定不同。
接下來,看看有兩個tab,打印出兩個windows句柄來,使用getWindowsHandles()方法。
==============================================================================================================================
package rjcs; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import java.util.Set; import org.openqa.selenium.interactions.Actions; import org.apache.commons.io.FileUtils; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; import org.testng.annotations.Test; import org.openqa.selenium.*; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.openqa.selenium.OutputType; import com.thoughtworks.selenium.SeleneseTestNgHelper; public class ckqh { public static void main(String[] args) { System.setProperty("webdriver.firefox.bin","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //設置火狐的安裝路徑,防止系統找不到 FirefoxDriver driver = new FirefoxDriver(); //初始化FireFox瀏覽器實例,並打開瀏覽器 try { driver.manage().window().maximize(); //最大化窗口 Thread.sleep(3000); driver.manage().window().maximize(); //最大化窗口 Thread.sleep(3000); driver.get("https://www.baidu.com"); //打開一個網址,方法一 Thread.sleep(3000); driver.findElementByPartialLinkText("設為主頁").click(); Thread.sleep(3000); System.out.println(driver.getWindowHandle()); //打印當前瀏覽器的當前標簽頁的句柄 String a = driver.getWindowHandle(); Thread.sleep(3000); System.out.println(driver.getWindowHandles()); //打印當前瀏覽器的所有標簽頁的句柄 //打印出來是一個list Thread.sleep(3000); Set<String> currenWindow = driver.getWindowHandles (); //獲取所有句柄 System.out.println (currenWindow.size ()); //打印句柄(即窗口)的個數 Thread.sleep(3000); driver.switchTo().window(a); //切換句柄 Thread.sleep(3000); }catch (Exception e) { e.printStackTrace(); }finally { driver.quit(); } } }
執行結果:
{5f9d93e2-496b-4402-a938-7968c83920db}
[{5f9d93e2-496b-4402-a938-7968c83920db}, {8beddbeb-0ce9-414c-8b83-2f8188da6bde}]
2