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 FTP操作类代码分享
May 13 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
Python常用知识点汇总
May 08 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
使用django实现一个代码发布系统
Jul 18 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
详解Python小数据池和代码块缓存机制
Apr 07 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弹出错误警告函数扩展性强
2014/01/17 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
PHP进程通信基础之信号
2017/02/19 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
php时间戳转换代码详解
2019/08/04 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
详解JS面向对象编程
2016/01/24 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python实现飞机大战小游戏
2019/11/08 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
两则小学生的自我评价分享
2013/11/14 职场文书
现场施工员岗位职责
2014/03/10 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
就业协议书范本
2014/04/11 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书