selenium中的window handle

webdriver之window handle

  1. 實例化一個webdriver後至關於開啓一個瀏覽器進程,
    一個實例化的driver能夠有多個window窗口,在瀏覽器中顯示爲多個標籤,
    好比點擊一個連接 網易,會打開一個新的窗口
  2. webdriver類中的全部方法有一個前提條件是:都做用於某一window handle
  3. window handle是惰性的,不會自動切換,若是打開了一個新的窗口,想在新窗口上獲取某一元素,須要先手動切換window handle,driver.switch_to.window(xxx_handle)
  4. 用driver.window_handles能夠獲取全部窗口句柄
  5. 窗口句柄是瀏覽器擁有的,元素沒有窗口句柄

window handle示例

`import time
            from selenium import webdriver
            from selenium.webdriver.common.action_chains import ActionChains

            def demo():
                driver = webdriver.Chrome()

                driver.implicitly_wait(10)

                driver.get('[http://baidu.com](http://baidu.com)')

                print(driver.window_handles) #打開百度後第一次打印窗口句柄

                bd_kw = driver.find_element_by_css_selector('#kw')

                bd_sb = driver.find_element_by_css_selector('#su')

                ac = ActionChains(driver)

                ac.send_keys_to_element(bd_kw, 'python').click(bd_sb).perform()

                py = driver.find_element_by_xpath('//*[@id="2"]/h3/a')

                py.click() #在百度中搜索python後打開一個新的窗口

                print(driver.window_handles) #第二次打印窗口句柄

                time.sleep(5)

                driver.close() #關閉driver的當前句柄,能夠用current_handle查看

                print(driver.window_handles) #第三次打印窗口句柄

                driver.switch_to.window(driver.window_handles[-1]) #切換window handle

                print(driver.current_window_handle) #打印current_window_handle,不切換會報異常,由於以前的window已經被咱們關閉了

                time.sleep(5)

                driver.quit()


            if __name__ == '__main__':

                demo()

            ----------------------
            >>>['CDwindow-3711170FE14EB6A64A8D9A51249D8EF6'] #只打開了百度首頁,因此只有一個
            >>>['CDwindow-3711170FE14EB6A64A8D9A51249D8EF6', 'CDwindow-1FDDE8A60F9569D82F5A477DCBF6B8E1'] #打開了百度首頁和某一個搜索出來的頁面,新的頁面在新的窗口中,因此有兩個
            >>>['CDwindow-1FDDE8A60F9569D82F5A477DCBF6B8E1'] #沒切換handle,關閉了第一個window,因此看到,原列表中的第一個元素被刪除了,只有新的窗口handle保留下來了
            >>>CDwindow-1FDDE8A60F9569D82F5A477DCBF6B8E1 #切換了handle,並打印出current_window_handle`

tips:

  1. driver的current handle也是惰性的,若是current window handle被關閉,那麼current_handle這個值就取不到了,會報異常,須要用手動調用driver.switch_to.window 來顯示切換。
  2. 若是元素定位失敗,要檢查一下是否是打開了新的窗口,若是是,則須要切換window handle,由於它不會自動切換。
相關文章
相關標籤/搜索