1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Selenium 窗口切換

        共 2829字,需瀏覽 6分鐘

         ·

        2020-08-07 05:30

        來源:SegmentFault 思否社區(qū)

        作者:Leofighting




        在瀏覽網(wǎng)頁的時候,有時點擊一個鏈接或者按鈕,會彈出一個新的窗口。


        使用 Selenium 進行 Web 自動化測試,如果彈出新窗口時,沒有對窗口進行切換,那么,WebDriver 對象?的焦點對應(yīng)的,依然是舊窗口,后續(xù)的自動化操作,將繼續(xù)在舊窗口中進行。





        實例驗證:


        # 模擬場景:打開百度,點擊左上角“視頻”鏈接,打印出當(dāng)前`WebDriver 對象` 對應(yīng)的窗口信息from selenium import webdriverfrom time import sleep
        driver = webdriver.Chrome() # 打開瀏覽器driver.maximize_window() # 瀏覽器最大化driver.get("https://www.baidu.com/") # 跳轉(zhuǎn)至百度首頁sleep(1)element = driver.find_element_by_xpath("http://div[@id='s-top-left']/a[4]") # 定位“視頻”元素element.click() # 點擊sleep(1)print(driver.title) # 百度一下,你就知道print(driver.current_url) # https://www.baidu.com/
        driver.quit() # 關(guān)閉瀏覽器


        根據(jù)程序的打印結(jié)果可知,窗口依然停留在百度首頁,當(dāng)前的 url :https://www.baidu.com/,由此可推斷,Selenium 沒有按照我們預(yù)期那樣,自動切換到新的窗口。


        考慮到后續(xù)的操作步驟都需要在新窗口進行,就需要對進行窗口切換,Selenium 提供的窗口切換方法是:

        WebDriver.switch_to.window()


        WebDriver 對象有 window_handles 屬性,返回一個列表,里面記錄了當(dāng)前瀏覽器所有的窗口句柄。

        句柄:對應(yīng)窗口的 id


        # 獲取當(dāng)前瀏覽器上所有窗口句柄from selenium import webdriverfrom time import sleep
        driver = webdriver.Chrome() # 打開瀏覽器driver.get("https://www.baidu.com/") # 跳轉(zhuǎn)至百度首頁sleep(1)element = driver.find_element_by_xpath("http://div[@id='s-top-left']/a[4]") # 定位“視頻”元素element.click() # 點擊sleep(1)print(driver.current_window_handle) # 當(dāng)前瀏覽器句柄:CDwindow-1FABF3D9B0B190F9883E66F25481738Eprint(driver.window_handles) # 獲取所有句柄:['CDwindow-1FABF3D9B0B190F9883E66F25481738E', 'CDwindow-0871993F618FDBE540426562AEA2FB32']for handle in driver.window_handles: print(handle)
        driver.quit() # 關(guān)閉瀏覽器


        因為 window_handles 返回的是一個列表,所以,可以通過列表下標(biāo)來更換當(dāng)前瀏覽器的窗口句柄,來實現(xiàn)窗口的自由切換:


        # 模擬場景:通過百度首頁,打開 hao123,再通過 hao123 點擊京東,進入京東首頁,搜索“筆記本電腦”from selenium import webdriverfrom time import sleep
        driver = webdriver.Chrome() # 打開瀏覽器driver.get("https://www.baidu.com/") # 跳轉(zhuǎn)至百度首頁sleep(1)element = driver.find_element_by_xpath("http://div[@id='s-top-left']/a[2]") # 定位“hao123”元素element.click() # 點擊sleep(1)windows1 = driver.window_handles # 獲取所有窗口句柄print(windows1) # 打印句柄列表print(driver.current_window_handle) # 打印切換前的句柄driver.switch_to.window(windows1[-1]) # 切換到最后一個句柄print(driver.current_window_handle) # 打印切換后的句柄element1 = driver.find_element_by_xpath("http://li[@data-id='11']//a[1]") # 在 hao123 定位 京東element1.click() # 點擊windows2 = driver.window_handles # 第二次獲取所有窗口句柄print(windows2) # 打印句柄列表print(driver.current_window_handle) # 打印切換前的句柄driver.switch_to.window(windows2[-1]) # 第二次切換到最后一個句柄print(driver.current_window_handle) # 打印切換后的句柄element2 = driver.find_element_by_xpath("http://input[@aria-label='搜索']") # 定位搜索輸入框element2.send_keys("筆記本電腦") # 輸入內(nèi)容element3 = driver.find_element_by_class_name("button") # 定位搜索按鈕element3.click() # 點擊sleep(3)
        driver.quit() # 關(guān)閉瀏覽器


        通過這個實例操作,可以看到,每一次切換窗口,都需要對獲取到最新的句柄位置。


        同樣,由于 WebDriver.window_handles 返回的是一個列表,也可以通過下標(biāo)值來切換到舊的窗口。





        總結(jié)






        點擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開更多互動和交流。

        -?END -

        瀏覽 46
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久久久国产欧美 | 欧洲女人的性生活视频免费播放网站 | 神马午夜伦理片手机在线免费观看 | 亚洲精品少妇 | 免费的操逼网 | 婷婷五月深爱激情 | 韩国vip内部大尺度青草 | 91九色Porny国产探花 | 成人mv | 娇妻4p被三个男人伺候电影 |