selenium之 切换窗口、frame、alert

旧方法 :  switch_to_     

新方法 :  switch_to.

老方法:
不同窗口之间的切换(handle):
切换窗口的方法
current_window_handle                 获取当前页面窗口的句柄
window_handles                        获取所有页面窗口的句柄
switch_to_window(window_name)         将定位的页面转到指定的window_name页面
                                      (window_name:指定页面窗口的handle)
------------------------------------------------------------------------
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://tieba.baidu.com/")
sleep(1)
driver.maximize_window()
sleep(3)
driver.find_element_by_css_selector("a[title = '娱乐明星']").click() # 点击title为娱乐明星的标签元素
sleep(2)
all = driver.window_handles                                         # 获取全部窗口的handle
print(all)
now_page = driver.current_window_handle                             # 获取当前窗口的handle(贴吧首页)
print(now_page)
title_first_page = driver.title                                     # 获取当前页面的title(当前title)
print(title_first_page)
driver.switch_to_window(all[1])                                     # 将页面handle转到娱乐明星页面
title_next_page = driver.title                                      # 获取当前页面的title(切换handle后)
print(title_next_page)

------------------------------------------------------------
打印:
['CDwindow-BCA0B0104E3564B15620A9ABCE23D640', 'CDwindow-D6437B97CE2171D745BD097809C2F1C1']
CDwindow-BCA0B0104E3564B15620A9ABCE23D640
百度贴吧——全球最大的中文社区
C:/Users/Administrator/PycharmProjects/untitled/day1/test9.py:25: 
DeprecationWarning: use driver.switch_to.window instead
  driver.switch_to_window(all[1])
娱乐明星_百度贴吧
Process finished with exit code 0

 

老方法:
切换页面frame:
关于页面frame的方法
switch_to_frame(frame_reference)      通过id、name、element(定位的某个元素)、索引来切换到某个frame
switch_to_default_content()           切换到主页面

注:driver.switch_to_frame(None) 等同于 driver.switch_to_default_content()
---------------------------------------------------------------------------

w3c网站的frame切换:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=html_frame_cols")
driver.maximize_window()

#定位父类层级iframe
ele_framest = driver.find_element_by_css_selector('#result > iframe')

# 切换到父类层级iframe-通过元素切换
driver.switch_to_frame(ele_framest)
print(driver.page_source)
print("-----------------------------------------------")

#切换到第二个子类frame-通过索引切换
driver.switch_to_frame(1)
print(driver.page_source)
print("-----------------------------------------------")

#切换到最上层层级-等同于driver.switch_to_frame(None)
driver.switch_to_default_content()
print(driver.page_source)

 

老方法:
获取浏览器弹窗alert、自定义弹窗以及其操作:
关于alert弹窗的方法:
switch_to_alert()            定位到alert弹窗,返回一个弹窗的对象
dismiss()                    对弹窗对象的取消操作(相当于点击弹窗上的取消按钮)
accept()                     对弹窗对象的确定操作(相当于点击弹窗上的确定按钮)
text                         对弹窗对象,获取弹窗内的文本
send_keys(key)               对弹窗对象内的输入框输入数据(如果弹窗的格式有输入框的话可以使用)
authenticate(name, pass)     对于身份认证弹窗,输入用户名和密码并自动提交
--------------------------------------------------------------------------------
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=jseg_prompt")
driver.maximize_window()
driver.switch_to_frame("i")    # 通过frame的name值来定位
ele = driver.find_element_by_css_selector('body > input[type="button"]')
ele.click()                    # 点击按钮触发弹窗
sleep(2)
a = driver.switch_to_alert()   # 定位到到弹窗
print(driver)
print(a.text)                  # 获取弹窗的内容
a.dismiss()                    # 触发取消按钮
sleep(2)
ele.click()                    # 再次点击按钮触发弹窗
a.send_keys("Jodie")           # 在弹窗中的输入框输入数据
sleep(2)
a.accept()                     # 触发确认按钮
切换窗口、frame、alert的新方法:
switch_to.

driver.switch_to.active_element()          
等同于    
driver.switch_to_active_element()          定位到当前聚焦的元素上

driver.switch_to.alert()                   
等同于    
driver.switch_to_alert()                   切换到alert弹窗

driver.switch_to.default_content()         
等同于    
driver.switch_to_default_content()         切换到最上层页面

driver.switch_to.frame(frame_reference)    
等同于    
driver.switch_to_frame(frame_reference)    通过id、name、element(定位的某个元素)、索引来切换到某个frame

driver.switch_to.window(window_name)       
等同于   
driver.switch_to_window(window_name)       切换到制定的window_name页面

driver.switch_to.parent_frame()                      
这是switch_to中独有的方法,可以切换到上一层的frame,对于层层嵌套的frame很有用

 

你可能感兴趣的:(selenium自动化基础知识)