Python: Selenium多窗口之前的切换, 如何使用Selenium在Windows之间切换, webdriver窗口切换

我们将学习在Windows之间切换。在网站上工作时,我们很可能会打开大量窗口。

每个窗口都可能要求我们执行一些操作以完成端到端的流程。为此,我们应该能够在它们之间切换。

我们还需要切换控件,然后执行所需的操作,因为默认情况下,焦点仍保留在父窗口上。

 

使用Selenium Python在Windows之间切换

Python: Selenium多窗口之前的切换, webdriver窗口切换
Python: Selenium多窗口之前的切换, webdriver窗口切换

 

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:如何使用Selenium在IFrame之间切换, Selenium获取IFrame, webdriver, How to Switch Between IFrames Using Selenium Python

Python:在Selenium中处理警报alert和弹出框Popup,操作alert、confirm、prompt对话框的方法, How to Handle Alert & Pop-up Boxes in Selenium Python

Python: webdriver操作select下拉选项, selenium设定select选项, selenium select dropdown, Handling Dropdowns

Python: selenium使用基本步骤, webdriver 自动化, 模拟浏览器登录

 

本文: Python: Selenium多窗口之前的切换, webdriver窗口切换

Loading

Add a Comment

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.