需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面。

要完成这个需求就必须实现3点:

1. 找到原始页面上面所有的在本窗口内跳转的链接

2. 跳转到目标页面之后,“后退”到原始页面

3. 在原始页面上继续点击后续的链接

首先,要找到页面上的所有链接并不困难。selenium为我们提供了find_elements_by_tag_name方法。我们只需要在初始化webdriver之后,调用

driver.find_elements_by_tag_name("a")

就能找到页面上的所有a标签。

我们可以对所有的a标签进行点击,但是这样的话我们不能保证所有的a标签所指向的目标页面都是站内的,有可能目标是其他的站外网页;另外这样也不能保证该跳转页面是在本窗口跳转而不是新开一个窗口。

解决办法:

使用selenium.webdriver.remote.webelement.WebElement提供的get_attribute方法。

通过get_attribute拿到该a标签的各种属性,通过判断找到符合要求的元素进行点击。

get_attribute("href") 得到a标签对应的目标页面的URL,对URL进行判断就可以了解到该页面是否站内页面。我们可以知道,如果是站内页面的话这个属性一般会是一个相对路径,或者包含了本站域名,但如果是站外页面的话,那它一定是包含了“http”的一个url。

get_attribute("target")如果target不是"_blank"的话,可以判断该页面是在本窗口跳转的。

跳转到下一页面后如何返回原始页面呢?

selenium webdriver 提供了back方法可以轻松的达到这个目标:driver.back()

最后,需要在返回了原始页面之后继续点击下一个链接进行测试,这个不用说肯定要使用for loop:

for i in range(0, len(driver.find_elements_by_tag_name("a"))):

在python中,如果我们指定i在range(0, x)中循环时,会以1为步长来遍历从0到(x-1)的序列。例如:range(0,5)会得到[0, 1, 2, 3, 4]。当我们想更改range的步长时,则需要为range方法提供第三个参数。例如:range(0,5,2),则会以2为步长,得到[0,2,4]这个序列。

另外,我们也可以使用类似C#中foreach的方法:

for targetLink in driver.find_elements_by_tag_name("a"):

这种方法同样可以遍历所有的a标签集合中的所有元素。

如果使用第二种方法,我们觉得这个需求可以简单的实现为:

links = driver.find_elements_by_tag_name("a")

for link in links:

if not "_blank" in link.get_attribute("target") and ("google" in link.et_attribute("href") or not "http" in link.get_attribute("href")):

link.click()

driver.back()

但是这样的实现在运行时会抛出异常:

selenium.common.exceptions.StaleElementReferenceException: Message: u'Element not found in the cache - perhaps the page has changed since it was looked up'

异常的说明已经很明显了:在cache中找不到元素,在元素被找到之后页面变换了。 这就说明,当当前页面发生跳转之后,存在cache中的关于这个页面的元素也被清空了。

因此,我们需要在每次回到原始页面之后对我们感兴趣的a标签元素重新搜索,同时我们又必须接着上次的点击到的元素继续点击。因此我们使用第一种遍历的方法来实现这个for loop:

length = len(driver.find_elements_by_tag_name("a")

for i in range(0,length):

links = driver.find_elements_by_tag_name("a")

link = links[i]

if not ("_blank" in link.get_attribute("target") or "http" in link.get_attribute("href")):

link.click()

driver.back()

这样,在每次返回页面之后会重新搜索一遍页面上的a元素,然后使用cache中的i继续点击下一个跳转链接。

python selenium自动化点击页面链接测试

python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...

selenium 点击页面链接测试

点击页面链接测试 http://www.51testing.com/html/21/n-862721.html 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口 ...

Python+Selenium 自动化实现实例-获取页面元素信息(百度首页)

#coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.ba ...

python+selenium自动化软件测试(第10章):测试驱动TDD

测试驱动开发模式,要求开发在写业务代码的时候,先写出测试代码,同时单元测试例子决定了如何来写产品的代码,并且不断的成功的执行编写的所有的单元测试例子,不断的完善单元测试例子进而完善产品代码, 这样随着 ...

python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]

背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

python+selenium自动化软件测试(第2章):WebDriver API

2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

python selenium自动化(二)自动化注册流程

需求:使用python selenium来自动测试一个网站注册的流程. 假设这个网站的注册流程分为三步,需要提供比较多的信息: 在这个流程里面,需要用户填入信息.在下拉菜单中选择.选择单选的radio ...

Python+Selenium使用Page Object实现页面自动化测试

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...

python+selenium自动化软件测试(第1章):环境搭建,你也可以直接用Anaconda!

1.1 环境搭建 1.1.1 selenium简介Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试 ...

随机推荐

vulcan测试记录

感觉这个游戏很赞,是六个里面最喜欢的一个了 1.有时候挖坑对于位置要求比较大? 2.感觉难度比较大,尤其是玩到第三关很考验啊(不过从另一个方面来说也是优点?) 3.玩到现在对于怪物吃金子的原理没有很懂 ...

基于WS-BPEL2.0的服务组合研究

http://tech.it168.com/soadocument/2008-01-03/200801031332376.shtml WS-BPEL是为组合Web服务而制定的一项规范.它的前身是由IB ...

快速tab应用

ZCTabNav-master https://github.com/zcsoft/ZCTabNav 层次构架清楚,很适合快速,导入

activiti学习总结

Activiti界面元素的使用总结 一.图形设计中元素的使用 1.SequenceFlow:连接线,可以连接两个任务,来管理流程实例的流向 -----General -----id:流程的id,用与程 ...

【转载】eclipse调试arm裸机程序

一.集成开发环境 软件部分:eclipse , GDB Server , Jlink软件 硬件部分:Jlink硬件 准备工作1:从SD/NOR Flash启动,格式化nand flash 准备工作2: ...

第二百一十天 how can I 坚持

Node.js 服务器端JavaScript,单进程. 该如何学习啊,貌似学什么都学不深入. 纠结死了. 睡觉.

qt里标识操作系统的宏

qt文件里的 windows的宏是Q_WS_WIN32/*   The window system, must be one of: (Q_WS_x) MACX     - Mac OS X      ...

SVM对偶形式

dual svm 对偶SVM linear SVM 可以用二次规划方法解 xn通过非线性转换变成zn SVM配合非线性特征转换 透过large-margin降低模型复杂度 透过特征转换得到弯弯曲曲的边 ...

【SSH2(理论+实践)】--Hibernate步步(一个)

前几个博客讨论SSH2该框架Struts,它代表层,集成封装.和使用WebWork作为核心处理,依赖映射是它的处理核心.在使用时需要Struts.xml配置相应Action和Interceptor够完 ...

【机器学习算法-python实现】KNN-k近邻算法的实现(附源代码)

,400],[200,5],[100,77],[40,300]]) shape:显示(行,列)例:shape(group)=(4,2) zeros:列出一个同样格式的空矩阵,例:zeros(group ...

python 自动点击网页上按钮_python selenium自动化(一)点击页面链接测试相关推荐

  1. python 头条 上传_Python+selenium自动化之文件上传

    邮箱的主要功能就是邮件消息的收发阅读,之前的文章写了邮件的查收和编写,本篇介绍邮件的附件上传.还是以腾讯企业邮箱为例,进行实际案例操作. 文件上传的实现大体分为两种,一种是input标签,一种非inp ...

  2. 用python爬取动态网页上的图片(百度图片)

    用python爬取动态网页上的图片(百度图片) 参考B站一个视频,视频链接: https://www.bilibili.com/video/BV1Va4y1Y7fK?share_source=copy ...

  3. 点击网页上的手机号码直接拨打电话

    今天写了一个html5的页面,使用bootstrap了目的是为了实现,一个页面同时适应手机.平板.和电脑不同分辨率的屏幕.在这个页面上有这么一个功能,点击网页上显示的手机号码直接拨打电话.功能很简单实 ...

  4. 点击网页上的手机号码直接拨打电话(针对手机端)

    点击网页上显示的手机号码直接拨打电话.功能很简单实现也不复杂.下面直接上代码,然后加以说明 这种方式拨打电话只在塞班与安卓上支持,而iphone是不支持的. 这种方式塞班.安卓与iphone都支持. ...

  5. python自动化流程概念_python selenium 自动化流程的一些总结与思考

    首先要考虑的项目为什么要做自动化测试?(主要从自动化测试的优点着手) 其次是什么项目才适合做自动化测试? 自动化测试覆盖率要达到什么样的程度?因为都知道不可能达到100%的,不然脚本太臃肿,反而会失去 ...

  6. python自动点击网页按钮_Python+Selenium使用(二)- 自动点击下一页

    继续上一篇: 橘猫吃不胖:Python+Selenium使用(一)​zhuanlan.zhihu.com 上一篇,获取了百度搜索后的结果页面,但是搜索结果又很多页,这里就获取下一页按钮,并点击它. 现 ...

  7. python点击网页坐标_Python+selenium点击网页上指定坐标

    from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains dr = ...

  8. Python+selenium点击网页上指定坐标

    from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChainsdr = ...

  9. dnf自动刷图python脚本_python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]...

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

最新文章

  1. MySQL:left join 避坑指南
  2. python 日志 装饰器_【Python】装饰器实现日志记录
  3. 【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
  4. Ajax的异步,是鸡肋还是鸡排?
  5. oracle走当前时间分区,Oracle分区使用波斯日历的时间间隔
  6. Kubernetes Dashboard on Ubuntu 16.04安装记录
  7. 使用PO+跨平台改造Macaca示例(APP端)
  8. ISA server 的备份与还原
  9. pcl 使用gpu计算法向量_PCL点云特征描述与提取(1)
  10. Oracle学习方法
  11. VBoxGuestAdditions.iso下载地址
  12. Excel文件加密后忘记密码 - 破解方法
  13. geth 搭建 私有链节点
  14. 【Python】利用Python对招聘信息数据分析
  15. Artifact ssmbuildFinal:war exploded: Artifact is being deployed SSM整合
  16. Java使用winrar压缩和解压缩文件
  17. pytorch深度学习_用于数据科学家的深度学习的最小pytorch子集
  18. element-ui calendar 日历控件实现编辑假期功能以及样式修改
  19. EasyNVR流媒体直播之:零基础实现摄像头的全平台直播 (一)内网直播的实现
  20. Camera | 3.瑞芯微平台MIPI摄像头常用调试命令

热门文章

  1. FTIR测试常见的问题及解答(一)
  2. 跨境电商独立站是什么,浅谈跨境电商独立站的优势
  3. 2021年中国健康体检现状与格局分析,老龄化趋势推动产业发展,民营占比持续提升「图」
  4. 手机奥斯卡:QQ手机管家夺影帝
  5. HTML5开发如何改变移动互联网
  6. 笛卡尔坐标系 (Cartesian coordinate system)
  7. 阿里云入主千方科技,顺道搞定宇视科技
  8. T-SQL 语句 —— 存储过程
  9. 让RenderDoc批量导出纹理
  10. ARP(地址解析协议)