Selenium确实还是很强大的。根据我以往的经验,这个东西在web测试里的作用还是相当大的。经过近期研究,暂时对基本运作方式有了一定了 解,依旧找个实例记录一下。本段脚本实现的是网易返现个人中心登录并检查订单前两项的返现值与账户中的总值是不是相等的问题。当然了,也不一定相等,哥相 等仅仅是因为哥的个人中心里仅仅有两个订单而已,多了的话也没问题,大不了结果不一样嘛….

本着不错过任何理所当然的不用加以说明的必然步骤的精神,进行绝对详细的说明。

1.装个Firefox,也就是火狐浏览器

2.用Firefox在Selenium官网上下载安装Selenium IDE,因为这个Selenium IDE是Selenium在Firefox下的一个脚本录制插件,使用Firefox下完以后是可以自动安装的,所以建议不用使用其它浏览器下载。

3.安装后重启浏览器,在菜单栏的“工具”中,会多出Selenium IDE的按钮,点击以后打开Selenium IDE,也就是Selenium的脚本录制程序

4.点开SeleniumIDE以后默认是开始录制脚本的,这时候就可以在所要测试的网页上进行操作了

5.操作的差不多了,到该验证的时候了,在需要验证的地方点右键,菜单中会有很多验证方法,或者对该元素进行其它操作的方法

6.之后在IDE中停止录制,将Format改成Python,就可以在Source中得到这一个用例的Python脚本了,需要注意的是,此脚本 默认的浏览器是你当前的默认浏览器,需要改一下,另外,还是先使用Python2.7吧,暂时好像不是很支持Python3.1

7.之后通过Selenium IDE的工具栏,就可以对这段操作过程进行回放了,也就是可以自动化实现这几个步骤了……

脚本录制完成之后,在Selenium IDE的Source中,即可以看到脚本的代码了,将Python语言的脚本复制出来,新建到一个Test.py的文件中,可以看到,代码如下,再次本着 不错过任何理所当然的不用加以说明的呃必然步骤的精神,小做分析一下(”’这种形式的在Python里是一种注释,暂用这个进行解释说明”’)。

# -*- coding: GBK –*-
    ”’这行是编码的字符集格式,默认这行是看不见的,并且默认应该是# -*- coding: cp936 -*-,因为我们测试中很多情况下要用到中文字符,使用cp936的话,对中文支持不是很友好,所以还是应该换成GBK的”’
from selenium import selenium  
import unittest
    ”’引用selenium跟unittest文件,其中selenium用于对selenium内核的引用,从而可以使用selenium。而引用unittest则是用于驱动测试过程”’
class youdaoTest(unittest.TestCase):
    ”’定义一个类youdaoTest,继承unittest.TestCase,相当于C++里继承时使用childClass::parentClass,TestCase类是Selenium里有来描述测试用例的类”’
    def setUp(self):
        ”’def用来定义类的函数,(self)类似于一个指针,指向自己,相当于this”’
        self.selenium = selenium("localhost", 4444, "*iexplore", "http://account.youdao.com/")
           ”’对youdaoTest的selenium进行定义,具体参数下篇文章再解释,只要记住本地运行的话,只要把最后一个参数改成你要测试的网址就行了”’
        self.selenium.start()
           ”’使用前一行对selenium的初始化及配置参数,开始youdaoTest的selenium的测试”’
    def test_youdaoTest(self):
        ”’具体测试内容、测试过程的脚本”’
        sel = self.selenium
            ”’这行主要是为了在后面对self.selenium表示方便,改一下名称。在python里,这种使用=的方法,是一种类似于指针的方法”’

sel.open("/login?service=gouwu&back_url=http%3A%2F%2Fgouwu.youdao.com%2Ffanxian%2Fuser%3F%26keyfrom%3Dgouwu.index.topright")
           ”’我在录制的时候,这个参数是跟在之前那个http网址的后面的,在录制的时候被自动拆分成了两个过程,没有参数的话,这里可以是/”’
        sel.type("username", "room001@yeah.net")
        sel.type("password", "123456")

”’表示我对一个id="username"的网页对象type输入了room001@yeah.net这个参数,该对象的id值,一般可以通过在网页上
该元素身上右键-Inspect Element来查看到的,当然,这个查看命令一般是浏览器自带的,不同的浏览器略有出入”’
        sel.click("//input[@value='' and @type='submit']")
            ”’这个是取网页对象的精华所在。很多时候,网页上的某个元素是没有明确id的,这时候就需要这种方式来选取,Xpath用法,以后会详解。这里这个命令大概是说对一个value=""(或没有value),type=“submit”的<input>元素进行click操作”’
        sel.wait_for_page_to_load("30000")
            ”’等等缓冲”’
        sel.click(u"link=我的订单")
        sel.wait_for_page_to_load("30000")
        f2 = sel.get_text("//div[@id='j_odt_Loader']/table/tbody/tr[2]/td[5]")
        f1 = sel.get_text("//div[@id='j_odt_Loader']/table/tbody/tr[1]/td[5]")

”’这又是一个精髓,继前面的click那行,又有很多时候,不止没有id,设置连value、type什么的都是一样的(常见于表格等等循环做出来的东
西),这个时候,就需要对重复的元素(一般是div)进行个排序,从上倒下,1,2,3,4,5…..,tr[2]/td[5]也就是说那个table的
第2行,第5列(也有可能数字有个偏差…)。这里f1/f2是我用来取数用的变量”’
        f1=float(f1[:4])
        f2=float(f2)
            ”’这个是这个用例里用来验证的代码,因为get_test取到的是字符串,这里转化成了数字f1/f2,其中f1取得太长了,有不想要的字,直接截取了一下前四位”’
        sel.click(u"link=我的帐户")
        sel.wait_for_page_to_load("30000")
        self.assertEqual(str(f1+f2), sel.get_text("//div[@id='fxuc_dashboard']/div[2]/div[1]/table/tbody/tr[2]/td/strong"))
            ”’seeretEqual用来验证后面的第二个参数是不是和第一个参数相等。一般相等的话,Case就Pass了,不相等就Fail了。这里第一个参数是f1+f2,然后转化成了字符,再去比较”’
    def tearDown(self):
        self.selenium.stop()
            ”’用来在执行完testcase之后表示让selenium停止”’

if __name__ == "__main__":
    unittest.main()

”’这个if语句,是用来判定这个.py文件是不是在单独运行。简单的说,如果这个py文件是在单独运行,或者说是个主程序,那个它的__name__就
会是__name__
,如果不是的话,或者说是用来被import的话,那么它的__name__就会是它的文件名,也就是Test。unittest.main()是用来驱
动我们所定义的youdaoTest来执行里面的代码的,所有def都会按selenium所定义的顺序来执行”’

以上说明基本上就是selenium的基本脚本的使用方法了。可以对其中需要的地方进行更改,就是一个TestCase的脚本了。

Selenium_IDE的基本使用及脚本解析的更多相关文章

  1. Apollo 启动脚本解析

    Apollo 启动脚本解析 sudo service docker start -- 是在ubuntu14.04中打开 在dev_start.sh脚本中会调用restart_map_volume.sh ...

  2. python脚本解析json文件

    python脚本解析json文件 没写完.但是有效果.初次尝试,写的比较不简洁... 比较烦的地方在于: 1,中文编码: pSpecs.decode('raw_unicode_escape') 2,花 ...

  3. android init进程分析 init脚本解析和处理

    (懒人近期想起我还有csdn好久没打理了.这个android init躺在我的草稿箱中快5年了.略微改改发出来吧) RC文件格式 rc文件是linux中常见的启动载入阶段运行的文件.rc是run co ...

  4. 大数据时代之hadoop(二):hadoop脚本解析

    “兵马未动,粮草先行”,要想深入的了解hadoop,我觉得启动或停止hadoop的脚本是必须要先了解的.说到底,hadoop就是一个分布式存储和计算框架,但是这个分布式环境是如何启动,管理的呢,我就带 ...

  5. Loadrunner Http接口Get/Post方法性能测试脚本解析

    最近使用LoadRunner 11进行了一次完整的Http WEB接口性能测试,下面介绍下Http接口Get/Post方法性能测试脚本通用编写方法. 1. Http接口性能测试基本流程 首先定义了一个 ...

  6. 关于ssh_copy_id脚本解析

    [oldgirl@module ~]$ more /usr/bin/ssh-copy-id #!/bin/sh # Shell script to install your public key on ...

  7. 每天一个脚本解析day1==》《service xxxxx status》之service脚本解析

    vim    /sbin/service #!/bin/sh . /etc/init.d/functions #读取环境变量. VERSION="$(basename $0) ver. 0. ...

  8. bat执行java程序的脚本解析

    使用java执行带Package的class文件java package1.package2.className  或java -cp .  package1.package2.className - ...

  9. hadoop运行作业的脚本解析

    #!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one or more # contribut ...

随机推荐

  1. EnterpriseDb公司的Postgres Enterprise Manager 安装图解

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackg ...

  2. [arc081F]Flip and Rectangles-[黑白染色]

    Description 传送门 Solution 有一个神秘的结论..我不知道大佬是怎么场上推出来的. 一个黑白染色图,每次可以任意翻转行或列的颜色,如果每个2*2的子矩阵内黑色格子都是偶数个,则可以 ...

  3. 苏州Uber优步司机奖励政策(4月23日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 北京Uber优步司机奖励政策(4月21日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. CUDA基础介绍

    一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi ...

  6. jquery 配合 jsp 实现 ajax 要注意的问题

    (这一次 jq 无法执行的原因竟然是: 没导入 jq 的 js 文件!!!!!!!!!!!!!!) 今天在写一个 select change 实现来 ajax 时,发现 jq 无法执行,网上查了下,发 ...

  7. Java虚拟机笔记(二):GC垃圾回收和对象的引用

    为什么要了解GC 我们都知道Java开发者在开发过程中是不需要关心对象的回收的,因为Java虚拟机的原因,它会自动回收那些失效的垃圾对象.那我们为什么还要去了解GC和内存分配呢? 答案很简单:当我们需 ...

  8. 所有权链(Ownership Chain)

    所有权链(Ownership Chain)是特殊的权限评估方式,常见拥有所有权的数据库对象是:数据库对象,数据库角色(Role),和架构(Schema),在创建数据库角色,或架构时,SQL Serve ...

  9. Object C学习笔记9-字符串NSMutableString

    NSMutableString类继承自NSString,所以在NSString中的方法在NSMutableString都可以使用. NSMutableString和NSString的区别在于NSMut ...

  10. 运行用例时,报错Unknow Error:Element xxx is not clickable……的解决方法

    P.S:近期selenium官方更新了版本以解决此问题 通常这种情况是由于在点击该元素时,js更换了元素属性造成的. 所以可以采用js的方式进行处理 方法如下: WebDriver driver = ...