Selenium篇7-WEB自动化中窗口切换

前言

上一篇博客介绍了iframe的切换,接下来还有两种比较重要的切换,窗口切换以及alert切换。

今天我们一起学习一下窗口切换

1、什么时候需要切换窗口?

  • 在页面上操作某些元素时,会触发新的标签页的打开,需要定位新的标签页里面的元素或操作,那么我们就需要切换窗口至新的标签页,才能定位到目标元素。

2、切换句柄

  • 1、每个窗口都会有自己一个独特的句柄,大家可以认为是窗口的唯一标识id,叫做句柄;
  • 2、获取当前窗口的句柄
print(driver.current_window_handle)
  • 3、获取当前浏览器所有窗口的句柄
handles=driver.window_handles
  • 4、切换句柄
# handles 打印出来是一个句柄,-1 代表最后一个打开的窗口
driver.switch_to.window(handles[-1])

3、实例

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.get('https://www.jd.com')

# 获取当前所有的handles ,总数为一个窗口,返回handles是一个列表对象
handles= driver.window_handles
print(handles)

# 当前所在页的title
print(driver.title)

# 点击 京东超市 新打开第二个窗口
driver.find_element_by_xpath("//a[@aria-lable='京东超市']").click()

# 等待新的窗口出现
WebDriverWait(driver,10).until(EC.new_window_is_opened(handles))

# 获取当前所有的handles,总数为两个窗口
handles = driver.window_handles

# 切换至京东超市窗口,只要是切换至最新的窗口,都可以使用handles[-1],返回handles是一个列表对象
driver.switch_to.window(handles[-1])
print(handles)
print(driver.title)  # 打印当前页的title

# 然后可以在新的窗口(京东超市)进行元素操作了
# 加一个显示等待,新的页面元素可点
locator = (By.XPATH,'//*[@id="chaoshi_fs_1"]/div[1]/div/ul[1]/li[2]/a')
WebDriverWait(driver,20).until(EC.visibility_of_element_located(locator))
# 点击 ‘超级量贩’
driver.find_element(*locator).click()
time.sleep(3)
driver.quit()

4、换一种方式实现切换句柄

其实如果两个窗口打开时,相互切换通过下表索引来切换会比较方便,如果多个窗口时,最好保持浏览器只有两个窗口,去一个页面操作完后,可以关闭当前的窗口。

例如

# 获取当前页面的handle
handle = driver.current_window_handle

# 获取所有窗口的句柄
handles=driver.window_handles
for i in handles :
   if handle !=  i :
      driver.switch_to.window(i)
      print(driver.title)

有什么问题,欢迎大家评论区评论交流!谢谢大家!
后续博客会继续分享相关知识!!
如果觉得博主这篇博客对大家有用,麻烦评论区留下自己的‘脚印’ !

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值