Selenium2+python自动化-窗口多标签处理方法总结(转载)

本篇转自博客:上海-小T

原文地址:https://i.cnblogs.com/EditArticles.aspx?opt=1

我们在用Selenium遇到多个浏览器窗口或单个浏览器多个标签(Tab)的状况时,往往都不太好处理,这里将介绍两种处理方法。

本文所引用的例子是百度,在百度首页下方有一个“把百度设为主页”的超链接,点击它会另起一个新标签页,是一个不错的例子:

1、switch_to.window()

该方法是Webdriver中内置的一个方法,除了在多个浏览器中作切换用,单个浏览器多个标签(Tab)之间的切换也可以用这个方法,思路就是先取得所有标签的句柄,然后循环遍历并判断是否是当前标签页,如果不是则切换。详细代码如下:

# encoding:utf-8

from selenium import webdriver

driver = webdriver.Firefox()

driver.get("http://www.baidu.com")

driver.find_element_by_id("setf").click()

handles = driver.window_handles

for handle in handles:

if driver.current_window_handle != handle:

driver.switch_to.window(handle)

driver.find_element_by_link_text("百度首页").click()

最后一句点击新标签上的“百度首页”链接操作成功即代表已成功切换标签。

2、利用JS清除target值

用F12工具查看该超链接,可以查看到有一个target属性:

target=_blank意思是在新窗口中打开被链接文档(引自w3school),通俗点解释就是超链接会用过新窗口(新标签)打开,那么将其值清除 便可实现点击该超链接后不会另起一个新标签页。利用Document 对象方法查找该id然后将其target的值清除:

js = ‘document.getElementById("setf").target="";‘

JS写完之后执行它,即可达到效果。完整代码如下:

# encoding:utf-8

from selenium import webdriver

driver = webdriver.Firefox()

driver.get("http://www.baidu.com")

js = ‘document.getElementById("setf").target="";‘

driver.execute_script(js)

driver.find_element_by_id("setf").click()

driver.find_element_by_link_text("百度首页").click()

最后一句点击新标签上的“百度首页”链接操作成功即代表已成功切换标签。

HTML DOM 定义了多种查找元素的方法,除了 getElementById() 之外,还有 getElementsByName() 和 getElementsByTagName(),在http://www.w3school.com.cn/jsref/dom_obj_document.asp上有详细的用法。

时间: 2024-08-02 11:03:12

Selenium2+python自动化-窗口多标签处理方法总结(转载)的相关文章

Selenium2+python自动化39-关于面试的题【转载】

前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点. 一.selenium中如何判断元素是否存在? 首先selenium里面是没有这个方法的,判断元素存在需要自己写一个方法了. 元素存在有几种形式,一种是页面有多个元素属性重复的,这种直接操作会报错的:还有一种是页面隐藏的元素操作也会报错 判断方法参考这篇:Selenium2+python自动化36-判断元素存在 二.selenium中hidden或者是displa

Selenium2+python自动化61-Chrome浏览器(chromedriver)【转载】

前言 selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrome浏览器版本号,对应的驱动文件版本号又不一样,如果版本号不匹配,是没法启动起来的. 一.Chrome遇到问题 1.如果在启动chrome浏览器时候,出现如下界面,无法打开网址,那么首先恭喜你,踩到了坑,接下来的内容或许对你有所帮助 >># coding:utf-8>>from selenium import webdriver >>driver = webdriver.Chrome()

Selenium2+python自动化5-操作浏览器基本方法

前言 前面已经把环境搭建好了,这从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API. 本篇主要讲如何用Python调用webdriver框架的API,对浏览器做一些常规的操作,如打开.前进.后退.刷新.设置窗口大小.截屏.退出等操作. 一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Ch

Selenium2+python自动化11-定位一组元素find_elements【转载】

前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式其实一样,只是前面是单数,这里是复数形式:find_elements 本篇拿百度搜索作为案例,从搜索结果中随机选择一条搜索结果,然后点击查看. 一.定位搜索结果 1.在百度搜索框输入关键字"测试部落"后,用firebug查看页面元素,可以看到这些搜索结果有共同的属性. 2.从搜索的结果可以

Selenium2+python自动化62-jenkins持续集成环境搭建【转载】

前言 selenium脚本写完之后,一般是集成到jenkins环境了,方便一键执行. 一.环境准备 小编环境: 1.win10 64位 2.JDK 1.8.0_66 3.tomcat 9.0.0.M4 4.jenkins 2.0 二.安装JDK 1.安装JDK教程很多,这里就不讲了,可以参考这个链接的教程:JDK安装配置教程_百度经验 在系统环境变量里添加以下变量: ①JAVA_HOME:jdk的安装路径C:\Sun\Java\jdk ②CLASSPATH:".;%JAVA_HOME%\lib;

Selenium2+python自动化67-用例失败自动截图【转载】

前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图. 一.不带变量的装饰器 1.参考资料:http://www.artima.com/weblogs/viewpost.jsp?thread=240845,这里这篇讲的很好,可以看下原文 2.这个是不带变量的装饰器__init__里是初始化参数,__call__里面是原函数参数 Decorators

Selenium2+python自动化46-js解决click失效问题【转载】

前言 有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了. 本篇用2种方法解决这种诡异的点击事件失效问题 一.遇到的问题 1.在练习百度的搜索设置按钮时,点保存设置按钮,alert弹出没弹出(代码没报错,只是获取alert失败),相信不只是我一个人遇到过. 二.点击父元素 1.遇到这种问题,应该是前面操作select后导致的后遗症(因为我注释掉select那段是可以点击成功的) 2.第一种解决办法,先点击它的父元素

Selenium2+python自动化29-js处理多窗口

前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没有办法让新打开的链接在一个窗口打开呢? 要解决这个问题,得从html源码上找到原因,然后修改元素属性才能解决.很显然js在这方面是万能的,于是本篇得依靠万能的js大哥了. 一.多窗口情况 1.在打baidu的网站链接时,会重新打开一个窗口  (注意:我的百度页面是已登录状态,没登录时候是不会重新打开

Selenium2+python自动化33-文件上传(send_keys)

前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库. 本篇以博客园的上传图片为案例,通过send_keys()方法解决文件上传问题 一.识别上传按钮 1.点开博客园编辑器里的图片上传按钮,弹出”上传本地图片”框. 2.用firebug查看按钮属性,这种上传图片按钮