一個瀏覽器可能打開多個網頁窗口。Selenium中每個窗口都有一個句柄,句柄是一個文本字符串。Selenium在任何時刻只能操作和讀寫1個窗口,要操作其他窗口必須用SwitchTo切換進去。
假設瀏覽器中打開了百度、京東、新浪。下面的代碼可以返回每個窗口的句柄
Dim windows() As String windows = WD.WindowHandles For i = 0 To UBound(windows) Debug.Print windows(i) Next i
立即窗口打印如下結果:
CDwindow-99175AB43E76632E809F8A1DBAB051D7
CDwindow-63759CACCD0CDD50084616C84EA8344C
CDwindow-F631E8013BDC18EA9E7F86F0E8F9B1CD
如果要獲取每個窗口的標題、URL、網頁源代碼等操作,必須切換到某個窗口中才能。
SeleniumBasic的ITargetLocator對象用於切換,具有的方法有
- Function ActiveElement() As IWebElement
- Function Alert() As IAlert
- Sub DefaultContent()
- Sub Frame(WE As IWebElement)
- Sub Window(windowName As String)
本節使用的是第5個方法,Window方法,作用是切換到指定句柄的窗口中。
Dim windows() As String Dim Locator As New SeleniumBasic.ITargetLocator windows = WD.WindowHandles Set Locator = WD.SwitchTo For i = 0 To UBound(windows) Locator.Window windows(i) Debug.Print windows(i), WD.Title, WD.URL Next i
運行上述代碼,一邊獲取句柄,一邊切換進去返回標題信息。
以上5個方法中,Frame與DefaultContent經常同時出現,用於框架之間的切換。Alert用於處理彈窗信息。