Selenium中web三大切換(一)之窗口切換


窗口切換,簡單來說就是在原來的頁面窗口下打開了一個新的窗口,需要要新的窗口中,去進行下一步的操作。

因此 需要知道:

1)怎么知道需要切換到哪個窗口?

2)代碼程序怎么知道哪個窗口是新的窗口?

步驟:

1)得到目前打開的所有窗口。

這里要引入句柄的概念,每個窗口都有一個句柄。

所有窗口顯示集合是一個列表。其順序是:先出現的,先追加到列表;新的窗口,在列表的最后。

即最先打開的窗口,在列表第一個;

# 獲取所有的窗口句柄
wins = driver.window_handles
print(wins)

2)切換到新窗口

# 切換到新的窗口
driver.switch_to.window(wins[-1])
print("切換之后的句柄:",driver.current_window_handle)

3)在新的窗口里,定位元素操作元素

示例:

這里以在百度中輸入“”搜索selenium webdriver“”,並在搜索結果中找到官網(切換到官網窗口),執行下載文件操作。

代碼如下:

 1 import time
 2 from  selenium import  webdriver
 3 from selenium.webdriver.common.by import By
 4 from  selenium.webdriver.support.wait import WebDriverWait
 5 from selenium.webdriver.support import expected_conditions as EC
 6 
 7 # 1、打開訪問百度
 8 driver = webdriver.Chrome()
 9 driver.maximize_window()
10 driver.get("https://www.baidu.com/")
11 
12 # 2、在百度首頁輸入框中輸入selenium webdriver
13 # 1)定位到百度首頁輸入框:根據ID定位
14 # 2)在輸入框中輸入:selenium webdriver
15 # 3)點擊百度一下:根據ID定位,后加點擊操作_click()
16 element = driver.find_element_by_id("kw")
17 element.send_keys("selenium webdriver")
18 driver.find_element_by_id("su").click()
19 
20 # 3、在搜索到的頁面結果中找到 - SeleniumHQ Browser Automation
21 loc =(By.XPATH, '//a[text()=" - SeleniumHQ Browser Automation"]')
22 # 使用隱性等待10秒,構建使得loc元素是可見的
23 WebDriverWait(driver,20).until(EC.visibility_of_element_located(loc))
24 # 觸發新的窗口出現:找到 - SeleniumHQ Browser Automation元素后,點擊跳轉到先窗口
25 driver.find_element_by_xpath('//a[text()=" - SeleniumHQ Browser Automation"]').click()
26 # 強制等待1秒
27 time.sleep(1)
28 
29 # 4、獲取所有的窗口句柄
30 wins = driver.window_handles
31 print(wins)
32 
33 # 5、獲取自己當前所在的窗口句柄
34 print(driver.current_window_handle)
35 
36 # 6、切換到新的窗口
37 driver.switch_to.window(wins[-1])
38 print("切換之后的句柄:",driver.current_window_handle)
39 
40 # 7、在新的窗口等待查找的元素,並對元素進行點擊操作
41 loc2 = (By.XPATH,'//div[@class="download-button webdriver"]')
42 WebDriverWait(driver,15).until(EC.visibility_of_element_located(loc2))
43 driver.find_element(*loc2).click()
44 
45 # 8、退出會話
46 time.sleep(5)
47 driver.quit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM