python3+selenium自动化测试-多窗口切换8

(8)多窗口切换
Webdriver提供了switch_to_window()方法,可以实现在不同的窗口之间切换。
current_window_handle:获得当前窗口句柄。
window_handles:返回所有窗口的句柄到当前会话。
switch_to.window();用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。

获取当前窗口句柄\所有的句柄
1.元素有属性,浏览器的窗口其实也有属性的,浏览器窗口的属性用句柄(handle)来识别
2.获取当前页面的句柄:driver.current_window_handle
3.浏览器开了多个窗口,可以获取当前所有的句柄:driver.window_handles

切换句柄
方法一:
1.循环判断是否与首页句柄相等
2.如果不等,说明是新页面的句柄
3.获取的新页面句柄后,可以切换到新打开的页面上
4.打印新页面的title,看是否切换成功

方法二:
1.直接获取all_h这个list数据里面第二个handle的值:all_h[1]

关闭新窗口,切回主页
1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证:driver.title
2.验证完后关闭新窗口:driver.close()
3.切回句柄到首页:driver.switch_to.window(h)
4.打印当前页面的句柄,看是否切换到首页了:driver.title

代码参考如下:

# coding:utf-8
from time import sleep
from selenium import webdriver

# driver = webdriver.Firefox()
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

h = driver.current_window_handle
print(h)  # 打印首页句柄

driver.find_element_by_link_text("登录").click()
sleep(3)
driver.find_element_by_link_text("立即注册").click()

all_h = driver.window_handles
print(all_h)     # 打印所有的句柄
# 方法一:判断句柄,不等于首页就切换
# for i in all_h:                       # 这里不建议用for循环了,很多小伙伴懵的
#     if i != h:
#         driver.switch_to.window(i)
#         print(driver.title)
#         driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("username-cr")
#         sleep(3)
#         driver.find_element_by_id("TANGRAM__PSP_4__userName").clear()
#         sleep(3)

# 方法二:获取list里面第二个直接切换

driver.switch_to.window(all_h[1])
print(driver.title)
driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("username-cr2")
sleep(3)
driver.find_element_by_id("TANGRAM__PSP_4__userName").clear()
sleep(3)

# 关闭新窗口
driver.close()

# 切换到首页句柄
driver.switch_to.window(h)

# 打印当前的title
print(driver.title)

参考链接
https://www.cnblogs.com/yoyoketang/p/6128611.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。