Selenium中web三大切換(二)之iframe窗口及Alert(彈窗)切換

1、web窗口之iframe窗口切換html

首先,iframe是html裏面的html頁面。python

若遇到要操做的元素,在iframed當中,則須要進行此操做。web

操做步驟:ui

1)判斷要操做的元素是否在iframe當前,可以使用元素定位方法進行判斷;spa

2)若1中判斷元素存在。則須要再判斷切換到那個iframe中。code

3)切換方法:htm

1 driver.switch_to.frame()

參數支持3種方式來肯定切換到哪一個一個iframe:blog

1 #1) iframe下標 從0開始
2 driver.switch_to.frame(3)
3 
4 #2) iframe元素的name屬性
5 driver.switch_to.frame("login_frame_qq")
6 
7 #3) iframe這個webElment元素。
8 
9 driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]))

具體實現的流程:element

1)打開訪問的頁面;get

2)根據元素定位等操做,進入到有iframe的頁面;

3)操做到有iframe的頁面當中,且後面的操做,是在此iframe中找到元素並操做;

4)切換到iframe窗口,進入下一代html當中

driver.switch_to.frame("iframe窗口_名稱")

5)在firame窗口中定位元素操做;

6) 回到默認的html頁面當中 - 第一代
driver.switch_to.default_content()

7)回到上一級的iframe - 上一代
driver.switch_to.parent_frame()

示例:僅供參考

import time
from  selenium import  webdriver
from selenium.webdriver.common.by import By
from  selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 一、打開訪問騰訊課堂
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://ke.qq.com/")

# 二、根據xpath定位當前頁面登陸按鈕,點擊登陸進入QQ登陸窗口
loc = (By.XPATH,'//a[@id="js_login"]')
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))
driver.find_element_by_xpath('//a[@id="js_login"]').click()

# 三、強制等待1秒
time.sleep(1)

# 四、在新的彈窗中找到QQ登陸按鈕,點擊進入QQ登陸帳號密碼輸入框
loc2 = (By.XPATH,'//i[@class="icon-font i-qq"]')
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc2))
driver.find_element_by_xpath('//i[@class="icon-font i-qq"]').click()

# 五、在QQ帳號登陸窗口
loc3 =(By.XPATH,'//iframe[@name="login_frame_qq"]')
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc3))
driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]').click()

# 六、切換到新的iframe的窗口
driver.switch_to.frame("login_frame_qq")

# 七、在QQ登陸窗口定位到QQ帳號信息
loc4 =(By.XPATH,'//*[@id="img_out_1xxxx"]')
WebDriverWait(driver,20).until(EC.visibility_of_element_located(loc4))
driver.find_element_by_xpath('//*[@id="img_out_1xxxx"]').click()

# 九、退出會話
time.sleep(10)
driver.quit()

 

2、web窗口之Alert(彈窗)切換

不少時候咱們會遇到彈窗,且必須對彈窗操做後才能對頁面進行操做。彈窗的優先級比網頁中的任意元素高;

這裏就以這種類型的窗口進行操做。

步驟:

1)點擊觸發操做,觸發彈窗出現;

1 driver.find_element_by_id("press").click()

2)等待彈窗出現;

3)將操做切換到彈窗;

1 driver.switch_to.alert

4)將彈窗關掉,進行下一步的頁面處理操做

1 print(alert.text)
2 alert.accept

 

示例:

 1 """
 2 alert類
 3 """
 4 import time
 5 
 6 from  selenium import  webdriver
 7 
 8 driver = webdriver.Chrome()
 9 driver.get("E:\Workspace\python\Web\class_05_0307\MyHtml.html")
10 
11 # 點擊動做,觸發彈框出現
12 driver.find_element_by_id("press").click()
13 # 等待彈窗出現
14 time.sleep(1)
15 
16 # 切換彈窗
17 alert = driver.switch_to.alert
18 
19 # 將彈窗關掉,進行下一步的頁面處理
20 print(alert.text)
21 alert.accept()
22 
23 # 關閉會話
24 time.sleep(5)
25 driver.quit()
相關文章
相關標籤/搜索