Validus A dead simple Python data validation library.…
September 26, 2019
Python: Selenium多窗口之前的切换, 如何使用Selenium在Windows之间切换, webdriver窗口切换
我们将学习在Windows之间切换。在网站上工作时,我们很可能会打开大量窗口。
每个窗口都可能要求我们执行一些操作以完成端到端的流程。为此,我们应该能够在它们之间切换。
我们还需要切换控件,然后执行所需的操作,因为默认情况下,焦点仍保留在父窗口上。
使用Selenium Python在Windows之间切换

WebDriver支持使用“switch_to_window()”方法在这些窗口之间移动。
driver.switch_to_window("window_handle")
现在,Webdriver驱动程序将调用上述窗口。
让我们看一个示例代码以了解其工作原理。
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By import time #open the first window driver = webdriver.Firefox() driver.maximize_window() driver.get("http://www.facebook.com") #get the window handle after the window has opened window_before = driver.window_handles[0] window_before_title = driver.title print(window_before_title) #open a new window driver.execute_script("window.open('http://www.twitter.com', 'new window')") #get the window handle after a new window has opened window_after = driver.window_handles[1] #switch on to new child window driver.switch_to.window(window_after) time.sleep(10) window_after_title = driver.title print(window_after_title) #Compare and verify that main window and child window title don't match if window_before_title != window_after_title: print('Context switched to Twitter, so the title did not match') else: print('Control did not switch to new window') #switch back to original window driver.switch_to.window(window_before) #Verify that the title now match if window_before_title == driver.title: print('Context returned to parent window. Title now match') print(driver.title)
在上述情况下,我们正在从Facebook迁移到Twitter。之后,我们使用“ switch_to.window()”命令将上下文也从Facebook移到Twitt 。
接下来,我们比较了两个网页的标题,以验证它是否已随上下文移至Twitter而更改。
最后,上下文被转移到Facebook,现在我们验证标题是否匹配。
快速总结–在Windows之间切换
了解如何使用Selenium Python在Windows之间切换非常重要。您可以重新使用此技术来解决项目中的实时用例。
实现思路:
1.handles = driver.window_handles获取当前浏览器打开的所有窗口的句柄,返回数组
2.通过handles数组的索引来在各个窗口之间切换
示例代码如下:
# -*- coding:utf-8 -*- """ 提示:在python文件命名的时候,尽量不要让文件名和类名相同,否则在导入类后使用该类时,会报错 """ from selenium import webdriver from time import sleep import time driver = webdriver.Chrome('E:\eclipse_jar\selenium_jar\chromedriver_lastest\chromedriver.exe') driver.get('http://www.baidu.com') #打开百度 sleep(1) driver.execute_script("window.open('http://www.sogou.com/')") #打开搜狐 sleep(1) driver.execute_script("window.open('http://www.youdao.com/')") #打开有道 sleep(1) driver.execute_script("window.open('http://www.qq.com/')") #打开腾讯 sleep(1) handles = driver.window_handles #获取当前浏览器打开的所有窗口的句柄,返回数组 print(len(handles)) #打印handles数组的长度 print('===========================') driver.switch_to.window(handles[3]) t0 = driver.title driver.save_screenshot('截图\\' + str(int(time.time())) + '.png') #截取当前窗口图片,表示切换成功 driver.close() print('成功关闭窗口:' + t0) print('===========================') sleep(1) driver.switch_to.window(handles[2]) t1 = driver.title driver.save_screenshot('截图\\' + str(int(time.time())) + '.png') #截取当前窗口图片,表示切换成功 driver.close() print('成功关闭窗口:' + t1) print('===========================') sleep(1) driver.switch_to.window(handles[1]) t2 = driver.title driver.save_screenshot('截图\\' + str(int(time.time())) + '.png') #截取当前窗口图片,表示切换成功 driver.close() print('成功关闭窗口:' + t2) print('===========================') sleep(1) driver.switch_to.window(handles[0]) t3 = driver.title driver.save_screenshot('截图\\' + str(int(time.time())) + '.png') #截取当前窗口图片,表示切换成功 driver.close() print('成功关闭窗口:' + t3) print('===========================') sleep(1)
更多参考:
Python: webdriver操作select下拉选项, selenium设定select选项, selenium select dropdown, Handling Dropdowns
Python: selenium使用基本步骤, webdriver 自动化, 模拟浏览器登录
本文: Python: Selenium多窗口之前的切换, webdriver窗口切换