点击页面链接测试

http://www.51testing.com/html/21/n-862721.html

需求:现在有一个网站的页面,我希望用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 点击页面链接测试的更多相关文章

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

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

  2. python selenium自动化(一)点击页面链接测试

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

  3. ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容

    首先是主页面main.aspx <body style="background-color: #AFEEEE"> <form id="form1&quo ...

  4. selenium依次点击页面的删除按钮

    需要依次点击页面的删除按钮,如下图: @Test public static void FaBu() { TestMenuJump.jumpExam(driver); TestMenuJump.jum ...

  5. selenium webdriver(2)---页面对象定位

    webdriver的元素定位很灵活,提供了多种定位方式: Id LinkText PartialLinkText Name TagName Xpath ClassName CssSelector 这些 ...

  6. Xenu Link Sleuth 简单好用的链接测试工具 使用说明

    XenuLink Sleuth 名词介绍 “Xenu链接检测侦探”是被广泛使用的死链接检测工具.可以检测到网页中的普通链接.图片.框架.插件.背景.样式表.脚本和java程序中的链接. 那么神马时候出 ...

  7. selenium 结合 docker 构建分布式测试环境 (初学者视角)

    前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...

  8. Selenium WebDriver-通过页面标题切换窗口

    selenium webdriver可以通过获取页面标题,再跟据标题去切换浏览器窗口,代码如下: #encoding=utf-8 import unittest import time import ...

  9. Xenu Link Sleuth 简单好用的链接测试工具

    XenuLink Sleuth 名词介绍 “Xenu链接检测侦探”是被广泛使用的死链接检测工具.可以检测到网页中的普通链接.图片.框架.插件.背景.样式表.脚本和java程序中的链接. 那么神马时候出 ...

随机推荐

  1. [Android基础]Android中使用HttpURLConnection

    HttpURLConnection继承了URLConnection,因此也能够向指定站点发送GET请求.POST请求.它在URLConnetion的基础上提供了例如以下便捷的方法. int getRe ...

  2. rabbitmq 安装-单点

    centos6.5  rabbitmq搭建 环境:centos6.5 192.168.9.41   安装rabbitmq需要先安装erlang.rabbitmq3.6版本需要erlang R16B03 ...

  3. API自动化测试利器——Postman

    自从开始做API开发之后,我就在寻找合适的API测试工具.一开始不是很想用Chrome扩展,用的WizTools的工具,后来试过一次Postman之后就停不下来了,还买了付费的Jetpacks.推出T ...

  4. shell执行lua脚本传参数

    #lua test.lua 2 5arg[0]= test.lua arg[1]= 2arg[2]= 5 if arg[1] and arg[1] == "2" then prin ...

  5. 关于left join遇到where就不管用的问题

    今天做了个存储过程,需要的功能是查询所有人的得分,有人没分就给零分,显而易见这里用左外连接是没有问题的, 但是在连接完之后有个根据时间筛选功能,于是我加了where条件判断,这时候没有想到的事情发生了 ...

  6. 关于Python有用的snippets

    1.将字典的key,value反转换位置 值value可以取任何数据类型,但键key必须是不可变的,如字符串,数字或元组. dict1={'Lisa':1,'Bob':2,'Mick':3} dict ...

  7. angularJs自定义模块

    <script type="text/javascript"> var myApp = angular.module("myApp",[]); my ...

  8. weblogic开启远程访问的jmx设置

    通过jmx远程访问weblogic获取监控jvm的数据,要在weblogic启动的时候设置一些配置,具体如下: 在weblogic的安装目录:{weblogic_home}/wlserver_10.3 ...

  9. A Pangram

    Codeforces Round #295 div2 的A题,题意是判读一个字符串是不是全字母句,也就是这个字符串是否包含了26个字母,无论大小写. Sample test(s) input 12 t ...

  10. Java对象 的创建与构造方法

    一.创建对象的四种方法: a. new语句: b. 利用反射,调用描述类的Class对象的newInstance()实例方法: c. 调用对象的clone(): d. 反序列化: 其中new 和 ne ...