自动化测试-句柄切换以及判断

872 阅读1分钟

本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元素,这样就造成了找不到元素的报错。本来介绍selenium中switch_to.window()方法来处理这个问题。 测试场景:打开百度(页面A),搜索抽屉,再打开抽屉网,现在浏览器有2个tab:

  • 1.百度tab
  • 2.抽屉tab

问题分析:

    1. switch_to.window()方法可以处理窗口切换的问题,我们需要用到该方法
    1. 在页面A跳转到页面B之前,我们需要用一个变量保存这个新闻的标题
    1. 切换到页面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()看看 是哪个句柄关闭了