selenium+python自动化测试之多窗口切换


Posted in Python onJanuary 23, 2019

在很多页面上都有可点击的链接,点击这些链接会打开一个新的窗口,这时如果要在新打开的窗口中操作页面,就需要先切换到新窗口中,如果不进行切换操作,还是操作的上一个页面窗口

浏览器窗口的切换通过句柄(handle)来操作,每个窗口都有一个句柄,代表当前窗口,需要操作哪个页面的窗口,切换到窗口对应的句柄。通过driver.switch_to.window(handle)来切换句柄

在新的窗口中打开页面

打开百度首页,点击右上角的新闻链接,默认会在当前窗口中打开。现在通过修改点击元素的属性,让新打开的页面显示在一个新的窗口中。

找到新闻元素的定义

<a class="mnav" href="http://news.baidu.com" rel="external nofollow" name="tj_trnews">新闻</a>

修改上面的代码,为news元素增加一个属性:target=”_blank”,增加这个属性后,再次点击链接,就会开启一个新的窗口来打开页面。通过执行js语句为元素增加属性

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)

#通过执行js语句为元素添加target="_blank"属性
js = 'document.getElementsByName("tj_trnews")[0].target="_blank"'
driver.execute_script(js)

news = driver.find_element_by_name('tj_trnews')
news.click()

webdriver执行js语句的内容在后面的博客中会有讲解,这里先使用一下,这样设置后,再次打开新闻页面时就会在新的窗口中打开。在上面的代码中再加入两句

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)
print(driver.current_window_handle) #打印当前页面的句柄
print(driver.title) #打印页面标题

#通过执行js语句为元素添加target="_blank"属性
js = 'document.getElementsByName("tj_trnews")[0].target="_blank"'
driver.execute_script(js)

news = driver.find_element_by_name('tj_trnews')
news.click()
time.sleep(3)

handles = driver.window_handles #获取所有打开窗口的句柄
print(handles)

程序输出:

selenium+python自动化测试之多窗口切换

第一次打印的结果是首页的句柄,第二次结果是获取到的当前所有打开的窗口句柄。一共打开了两个窗口,一个是主页,另一个是点击新闻打开的页面,所以第二次获取到的是一个list,包含两个窗口的句柄。

获取到窗口的句柄后,就可以通过切换句柄来操作页面,打开新闻页面后,当前的句柄还是主页的句柄,如果要操作第二个页面,需要将句柄切换到第二个窗口

driver.switch_to.window(handles[1])
print(driver.current_window_handle)
print(driver.title)

输出结果:

selenium+python自动化测试之多窗口切换

可以看到,切换后再次打印的句柄是list的第二个元素,也就是将句柄切换到了第二个打开的新窗口中,这样就可以操作第二个页面中的元素了。在切换句柄后打印了一下页面标题,根据标题得知句柄已经切换到新闻页面窗口了

在操作完新闻页面后,使用close()关闭当前页面,close和quit的区别在selenium+python自动化测试(二)?使用webdriver操作浏览器中已经说明过,关闭当前页面后会回到首页,需要将句柄再切换回主页

driver.switch_to.window(handles[0])
print(driver.title)

输出结果:

selenium+python自动化测试之多窗口切换

句柄又切换为了首页的句柄,现在又可以操作主页的元素了

全部代码:

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)
print(driver.current_window_handle) #打印当前窗口的句柄
print(driver.title) #打印当前页面标题

#通过执行js语句为元素添加target="_blank"属性
js = 'document.getElementsByName("tj_trnews")[0].target="_blank"'
driver.execute_script(js)

news = driver.find_element_by_name('tj_trnews')
news.click()
time.sleep(3)

handles = driver.window_handles #获取当前打开的所有窗口的句柄
print(handles)

driver.switch_to.window(handles[1]) #切换到第二个窗口的句柄
print(driver.current_window_handle)
print(driver.title)

driver.switch_to.window(handles[0]) #切换回主页句柄
print(driver.title)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python深入学习之上下文管理器
Aug 31 Python
Python map和reduce函数用法示例
Feb 26 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Flask框架信号用法实例分析
Jul 24 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
解决python文件双击运行秒退的问题
Jun 24 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
Python logging模块进行封装实现原理解析
Aug 07 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 #Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 #Python
selenium+python自动化测试之页面元素定位
Jan 23 #Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 #Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 #Python
对Python实现累加函数的方法详解
Jan 23 #Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 #Python
You might like
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
Python获取系统默认字符编码的方法
2015/06/04 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
使用python编写监听端
2018/04/12 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
互动出版网:专业书籍
2017/03/21 全球购物
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
会计演讲稿范文
2014/05/23 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python