本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下selenium简单线性脚本的编写,并提供全部代码。

文中将看到,使用selenium编写一个能操作浏览器的脚本是非常容易的。而简单线性脚本的编写是下一步编写页面对象脚本的基础。

1.在开始之前,我想明确一下,自动化测试的基本原理。

有的测试人员认为自动化测试很神秘,很神奇。恰恰相反, 自动化测试很简单。

自动化测试,一般分三个步骤:

1)取预期结果;

2)取实际结果;

3)断言:比较1)和2)来判断测试是否通过;

从历史角度来看,自动化测试的出现早于专职测试人员的出现。也就是说在开始有我们这些专门做软件测试的测试人员之前,自动化测试已经存在了。

原因就是他 简单。

selenium自动化测试,在自动化测试里也是属于超级 简单的一类。但前提是必须理解上面说的自动化测试原理,以及其他一些自动化测试设计原则。否则,我们将会看到, 简单的项目也会失败 。有很多由初、中级开发人员或会一点点代码的测试人员编写的selenium自动化测试项目,因此失败。

2.简单的selenium测试脚本编写,一般也是分三个步骤:

1)定位一个元素

2)操作一个元素

3)断言

好,这里用百度首页的搜索做一个例子:

1 package simplewebtest.test;

2

3 import java.util.concurrent.TimeUnit;

4

5 import org.openqa.selenium.By;

6 import org.openqa.selenium.WebDriver;

7 import org.openqa.selenium.firefox.FirefoxDriver;

8 import org.testng.annotations.Test;

9

10 public classTestBaiduHome {

11

12 @Test

13 public void searchSomething(){

14

15 WebDriver driver=new FirefoxDriver();//打开Firefox; open firefox

16 driver.get("http://www.baidu.com");//打开百度open the url

17 driver.findElement(By.id("kw1")).sendKeys("GitHub");//输入搜索关键字“GitHub";input search keyword

18 driver.findElement(By.id("su1")).click();//点击搜索按钮click the search button

19 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时。waiting for 10 seconds

20 String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四条搜索结果的标题。 get the text of 4th search result

21 assert aResult.contains("GitHub");//做断言 assertion

22 driver.findElement(By.xpath(".//*[@id='4']/h3/a")).click();//打开第四个搜索结果。Open the 4th search result on baidu

23 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时。waiting for 10 seconds

24

25 //获取所有窗口的handle,然后逐个切换,直到切换到最新窗口 switch to the new window

26 for(String winHandle : driver.getWindowHandles()){

27 driver.switchTo().window(winHandle);

28 }

29

30 String aTitle=driver.getTitle();//取新窗口的title

31 System.out.println("current widnow title is:"+aTitle);//打出来看看

32 assert aTitle.contains("GitHub");//断言

33

34 }

35 }

View Code

本系列所有代码https://github.com/zhangting85/simpleWebtest,

这个例子存放在src/test/java/simplewebtest/test/TestBaiduHome.java

下面逐行解释:

WebDriver driver=new FirefoxDriver();

这里是声明了一个 WebDriver 类型的对象引用,我给他起名叫driver;

然后让这个driver指向WebDriver的一个子类(FirefoxDriver)的对象;

我们知道FirefoxDriver继承自WebDriver,IEDriver也继承自WebDriver;

就像苹果继承自水果,橘子也继承自水果;

这里用了Java的向上转型,使用子类的对象来初始化父类的引用。(注:实际上Webdriver是一个接口。)

这将产生什么效果呢?

我们在driver上调用方法的时候,都是先查找WebDriver里的方法定义,然后jvm去他的子类比如FirfoxDriver中找到其在子类中的实现,再执行的。比如FirefoxDriver的get方法和IEDriver的get方法,他们具体执行的代码内容明显是不一样的。但我们的脚本,只要改变driver引用的子类,而不用改变我后面的方法调用。

也就是说,我们用firefox和用ie,除了第一句话新建对象时不一样,后面的方法调用都是一样的。

java会自动根据我们上面这句话里创建的对象,去选择他应该执行的实际代码。

这也就是JAVA里的多态,一句话记住多态:用子类对象初始化父类引用,方法调用时自动执行子类代码,成员变量调用时自动调用父类成员变量。

以上,题外话略多,是希望测试人员不要自我放弃,写个程序不会有多难,Java的基础必须要掌握。

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

调用Webdriver的get方法,跳转到制定的URL;

凡是这里跳转不过去的,十有八九是因为webdriver版本太低,浏览器版本太高,请改上一节讲的pom.xml里配置的webdriver版本号至最新版。

driver.findElement(By.id("kw1")).sendKeys("GitHub");//输入搜索关键字“GitHub";input search keyword

driver.findElement(By.id("su1")).click();//点击搜索按钮click the search button

这里调用Webdriver的findElement方法来查找页面元素。然后在找到的页面元素WebElement对象上调用sendKeys方法来打字和click方法来点击。

如果你问我这个id的值是怎么来的,那么你可以去看一下FireBug这个插件,他会替你找到每一个元素的一切属性。

如果你要定位的元素没有id,你还可以用className,Xpath,css,等等来定位。

另一个插件FirePath可以帮你产生任意元素的xpath表达式。

findElement方法需要一个By类型的参数。

但是代码里我们使用了By.id("kw1") 这里的id是一个静态方法,他的声明是:

public static By id(java.lang.String id)

所以我们调用By.id的时候,他会返回一个By类型的对象给我们。

至于下面findElement是怎样用这个对象来查找页面元素的,暂时不讲。简单来说,就是把我们传入的id传给对应的Driver,由driver去查找元素,再返回给我们。

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

很常用的一个等待页面加载的语句。这个implicityWait是会对driver的下一个findElement调用起作用的。

百度这个搜索结果页面很有意思,虽然我们感觉不出来,但搜索结果其实是异步显示上去的,所以不加等待他就会找不到元素。

而后面点击搜索结果打开一个窗口的时候我们再次用了等待。

另外,这个方法并不是对所有网页都有效,有时我们要用一些别的等待。还有尽量不要用Thread.sleep

String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四条搜索结果的标题。 get the text of 4th search result

assert aResult.contains("GitHub");//做断言 assertion

这两句,首先去取实际结果,也就是根据某个xpath表达式找到的搜索结果元素上的Text

然后,再判断他是否符合预期结果,即包含有“GitHub”这个字符串。

assert是TestNG提供的,这里不要用if else去判断这个字符串。TestNG的assert结果会反映在测试报告里。

也不要自己去抛出一个代表断言失败的异常,TestNG会替你完成这件事。

以上两个错误是中低级开发人员编写测试框架时常犯的。

我们既然用了TestNG,请至少尝试去用TestNG的功能。

for(String winHandle : driver.getWindowHandles()){

driver.switchTo().window(winHandle);

}

这段代码表示切换窗口。有意思的是,他是在窗口打开后,先取出所有窗口的hanles,然后一个一个切过去。

因为新窗口必定在最后,所以不论你有几个窗口,这段代码总能找到最新一个窗口。如果你还需要操作老窗口,

可以事先把老窗口的Handle保存起来,以后再切回来。

以上一个简单的线性测试脚本编写完毕。基本的元素定位、元素操作、窗口切换、断言都有了,你可以查看官网的文档,了解各个api的更多方法。

熟练地编写线性脚本大概需要个把月,有编程基础的更快,这一篇介绍的内容基本没有难度。下一篇介绍进阶的线性脚本,包括frame,actions,关闭浏览器,运行javascript,WebDriverWait。

觉得不错的可关注微信公众号在手机上观看,让你用手机边玩边看

java编写自动化脚本_自动化脚本相关推荐

  1. python代替shell脚本_自动化shell脚本except与python的pexpect模块

    expect脚本 expect是什么 expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预.说白了,expect就是一套用来实现自动交互功能的软件. 在实际工作中,我们运行命令. ...

  2. sh脚本和bash脚本_在脚本中使用Bash陷阱

    sh脚本和bash脚本 很容易检测到shell脚本何时启动,但是并不总是容易知道何时停止. 脚本可能会正常终止,就像作者希望的那样终止,但是由于意外的致命错误,脚本也可能会失败. 有时,保留脚本失败时 ...

  3. 怎么写脚本_直播脚本怎么写|请收下这份攻略

    "口红一哥"李佳琦为何那么牛,有人说是因为站在了风口上,有人说是因为他标志性的吆喝声.事实上,更大的因素在于他对每场直播的精心准备.比如,李佳琦推荐每款产品时,往往都会提炼出一个. ...

  4. java编写应用程序_为您的Java应用程序编写数据驱动的测试

    java编写应用程序 JUnit是一个功能非常强大的测试框架,它不仅为其用户提供了编写快速简便的测试的功能,而且还为用户提供了扩展它并使其按其期望的方式工作的机会. 在JUnit之上构建了许多框架,这 ...

  5. java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习

    鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...

  6. ncverilog脚本_基于脚本和test bench的ncverilog ASIC仿真实例分析

    基于脚本和 test bench 的 ncverilog ASIC 仿真实例分析 本文以一个虚拟的 xlab 项目为例,基于 linux OS 平台,详细分析了通过 testbench 和仿 真模型等 ...

  7. java编写应用程序_使用Java API编写应用程序

    java编写应用程序 总览 介绍 DB2JSON可用于DB2 Linux,Unix和Windows 10.5以及用于z / OS V3.1的IBM DB2 Accessories Suite与DB2 ...

  8. 怎么快速写python自动化脚本_自动化脚本如何编写?

    首先,我们看一个视频 ,通过视频,了解下什么是自动化脚本 . 这个是我用auto.js写的一个 抖音自动养号脚本 .大体功能就是自动私信,评论,关注 , 有兴趣可以先去一下链接了解 . 目前编写自动化 ...

  9. python写闲鱼脚本_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...

  10. python写闲鱼脚本_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~

    1 目 标 场 景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成 ...

最新文章

  1. 微软 WinGet 抄袭 AppGet 始末,个人开源的困境该如何破?
  2. java web 程序---javabean实例--登陆界面并显示用户名和密码
  3. leetcode(二)二分法查找算法
  4. C#.net拖拽实现获得文件路径
  5. 《电路》邱关源 思维导图 第七章-一阶和二阶电路的时域分析
  6. 关于Linux的rear命令
  7. 密码学应用的四个进化阶段 | 博文精选
  8. 计算机文件查看隐藏文件,电脑隐藏文件怎么显示啊,明明点了显示所有文件,按了确定后,又恢复了原来样子,为什么啊...
  9. 计算机二级考试进制转换可以用计算机嘛,2016年计算机二级考试题中有关进制转换和编码问题...
  10. Unity-odin-npbehave结合烟雨大佬的示例
  11. Python爬虫:猫眼电影反爬—动态字体处理(2020)
  12. 可道云kodexplorer搭建私有云后的配置优化
  13. 《Linux内核 》MOOC 课程
  14. Latex指定表格某行的行高
  15. Java垃圾回收(清除内存),监控内存
  16. 少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(选择题)2022年9月
  17. 第7章 - 多无人机系统的协同控制 --> 多无人机协同控制
  18. 内网ip映射到外网软件80全端口映射
  19. jquery实现类似微信输入框的输入聊天框
  20. android+仿有道云手写,有道云 Android新版发布 手写更逼真

热门文章

  1. china-pub近期免费赠书活动大汇总
  2. 倒立摆:Simulink建模
  3. PC端输入法双拼皮肤分享
  4. Flash MX 2004 帮助CHM 在线版
  5. 【快代理】开放代理使用教程
  6. 学习日志——2019/08/18
  7. 学计算机买小米air可以么,Mi 小米 Air13.3 笔记本电脑 三个月使用体验
  8. JS库之Highlight.js高亮代码
  9. 新版盲盒交友小程序源码下载
  10. linux 黑苹果 win7双系统,学习笔记:安装黑苹果和win双系统(基础篇)