做自动化测试时经常会遇到操作的元素不在当前窗口的场景。针对此种情况,本节进行多窗口切换实战案例演示。
当单击某个链接或按钮时,当前窗口会跳转到新的窗口。此时,可以使用GET方法获取新窗口的URL,从而实现新窗口页面下的元素定位,如图2.27和图2.28所示。
图2.27 窗口1界面
图2.28 窗口2界面
示例如下:
from selenium import webdrvier from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.find_element_by_id("kw").send_keys("渗透吧") driver.find_element_by_id("su").click() # 第一个窗口下单击“渗透吧”链接 driver.find_element_xpath('//*[@id="1"]/h3/a').click() # 使用get()方法获取跳转后的URL地址 driver.get('http://tieba.baidu.com/f?kw=%C9%F8%CD%B8&fr=ala0&tpl=5') sleep(3) # 操作跳转后所在窗口的页面元素 driver.find_element_by_link_text('进入贴吧').click()
本案例中使用window_handles获取所有窗口,并返回一个list对象;然后通过switch_to.window(window[index])方法来切换指定窗口,如window(1)表示切换到第二个窗口。
示例如下:
from selenium import webdriver from time import sleep from selenium.webdriver.common.by import By dr = webdriver.Chrome() url = "https://www.so.com/" dr.get(url) sleep(1) dr.find_element_by_link_text("360导航").click() sleep(2) # 获取所有窗口的句柄 windows = dr.window_handles # 通过索引切换到第二个窗口 dr.switch_to.window(windows[1]) sleep(0.5) # 在第二个窗口的文本框中输入“第二个窗口” dr.find_element_by_id("search-kw").send_keys("第二个窗口") sleep(2) # 切换到第一个窗口 dr.switch_to.window(windows[0]) # 在第一个窗口的文本框中输入“第一个窗口” dr.find_element_by_id("input").send_keys("第一个窗口")