本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元素,这样就造成了找不到元素的报错。本来介绍selenium中switch_to.window()方法来处理这个问题。 测试场景:打开百度(页面A),搜索抽屉,再打开抽屉网,现在浏览器有2个tab:
- 1.百度tab
- 2.抽屉tab
问题分析:
-
- switch_to.window()方法可以处理窗口切换的问题,我们需要用到该方法
-
- 在页面A跳转到页面B之前,我们需要用一个变量保存这个新闻的标题
-
- 切换到页面B后,我们获取这个新闻标题,然后和前面这个变量保存的值去对比,如果相等,那么就测试通过。
我们分两个步骤去解答这个测试需求:
- 1.先实现页面A切换到页面B
- 2.页面A和页面B两个新闻标题进行对比
代码如下:
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('抽屉')
driver.find_element_by_xpath('//*[@id="su"]').click()
driver.implicitly_wait(10)
driver.find_element_by_xpath('//*[@id="1"]/h3/a').click()
#获得当前句柄
print(driver.current_window_handle)
#获得所有句柄
handles = driver.window_handles
for handle in handles:
if handle != driver.current_window_handle:
print('switch to second handle',handle)
time.sleep(3)
driver.close()
#切换句柄
driver.switch_to.window(handle)
time.sleep(3)
复制代码
注意:判断当前在哪个句柄,只需要在当前句柄driver.close()看看 是哪个句柄关闭了
评论前必须登录!
注册