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类定义的讲解
Nov 01 Python
Python3实现连接SQLite数据库的方法
Aug 23 Python
Django自定义manage命令实例代码
Feb 11 Python
Python字符串的常见操作实例小结
Apr 08 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 Python
Django Celery异步任务队列的实现
Jul 24 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
解析PyCharm Python运行权限问题
Jan 08 Python
pandas中对文本类型数据的处理小结
Nov 01 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分页显示制作详细讲解
2006/10/09 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
mysql总结之explain
2012/02/27 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
python抓取百度首页的方法
2015/05/19 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
python属于哪种语言
2020/08/16 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
2014/03/31 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
中学生运动会新闻稿
2014/09/24 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
逃课检讨书
2015/01/26 职场文书
2015年团支部工作总结
2015/04/03 职场文书
大学推普周活动总结
2015/05/07 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫