
Java+Selenium3POM自动化测试框架设计系列
文章平均质量分 77
Anthony_tester
这个作者很懒,什么都没留下…
展开
-
Java+Selenium3框架设计篇6-如何解决多条类下用例执行只启动一次浏览器的问题
前面我们实现了在setUp方法中添加登录的用例。今天,还是为了解决我们遗留的问题,如果执行多条测试用例,这些用例在不同类文件下,我们只需要启动一次浏览器,登录一次,然后根据顺序去执行多个类文件下的用例,最后退出并关闭浏览器。解决思路:1.在一个类文件中执行多个用例,我们现在没有问题2.假如我有两个类文件,每个类文件都包含一个测试用例。如何保证用例A执行完后的driver如...原创 2017-08-18 22:47:08 · 11860 阅读 · 14 评论 -
Java+Selenium3框架设计篇5-如何实现邮件发送测试报告
本篇继续回答网友的问题,这个主题是如何通过邮件发送测试报告。通过邮件发送测试报告,这个很重要,也很有必要。不管你使用什么自动化测试框架,都建议添加发送测试报告的功能。先来设计我们的发送邮件的场景:假如我们测试报告是固定的名称,放在固定的路径下。1.下载java mail api包 浏览器打开https://mvnrepository.com/artifact/com.sun.m原创 2017-08-16 22:15:57 · 9316 阅读 · 8 评论 -
Java+Selenium3框架设计篇4-如何实现登录功能放在setUp()方法中
本篇主要是回答一个网友的问题,就是他可以执行登录,但是登录之后的用例就执行不了,报空指针异常。在这里,特意用京东网站,结合testNG来举例实现这个功能,解决这个报错。我们的场景大概是这样的,我需要先登录,然后在京东首页搜索一个商品。就这么一个简单的测试场景,我们的测试用例的重点是在搜索商品,测试的前提条件是登录。解决思路:1. 登录是搜索的前提条件2.登录能不能封装到一个普通类中去,原创 2017-08-15 23:08:09 · 6221 阅读 · 11 评论 -
Java+Selenium3框架设计篇3-利用京东来举例实现POM和测试页面基类
前面一篇,我介绍了BasePage.java的内容,解释了写这个类的好处。主要有二次封装selenium一些常见方法,还有就是创建所有页面类的父类。这篇,我们借助京东商城这个网站来举例如何实现POM并测试我们的BasePage类。完整eclipse项目结构图如下:1.BasePage.java内容。 由于点击一个商品,会在新tab打开显示商品详情页,所以,这里我们需要用原创 2017-08-09 23:25:44 · 8723 阅读 · 11 评论 -
Java+Selenium3框架设计篇2-Selenium方法的二次封装和页面基类
前面我们介绍了如何设计支持不同浏览器测试,我们的解决方法是,通过切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试。我们暂且叫浏览器引擎类,这个类负责获取浏览器类型和启动不同浏览器,并做一些前提操作,例如最大化浏览器窗口和,打开测试服务器地址。接下来,这篇我们介绍如何封装几个Selenium方法到我们的页面基类中去。在这之前,我们要解释一下页面基类,看到基类,我们想起了继承。没错,原创 2017-08-06 22:57:21 · 9163 阅读 · 1 评论 -
Java+Selenium3框架设计篇1-跨浏览器支持
本篇开始介绍Java+Selenium+POM的简单自动化测试框架设计。第一个设计点,就是支持跨浏览器测试。从我个人角度来说,跨浏览器测试。同一个测试用例,支持用不同浏览器去执行。我们这里只考虑winodws平台的浏览器,而且只关注火狐和谷歌浏览器的自动化测试,我们已经知道IE执行很慢,而且容易出问题。那到底要怎么做呢,才能支持一个自动化用例能够在不同浏览器上运行?我是通过读取配置文件的值,来切换原创 2017-08-02 21:21:27 · 7738 阅读 · 22 评论 -
Java+Selenium3框架设计准备篇12-纯JAVA方法实现日志输出
前面一篇介绍如何通过开源jar包Log4j.jar实现日志文件输出,Log4j确实很强大,能生成三种日志文件,一种是保存到磁盘的日志文件,一种是控制台输出的日志,还有一种是HTML格式的日志文件。有时候,我们不一定都需要这些文件,在我们自动化测试框架里,我们只需要把日志文件保存到磁盘文件中,所以,这里介绍一种不用Log4j来实现日志文件写入和保存。 通过分析前面一篇生成的log原创 2017-07-25 23:14:38 · 4738 阅读 · 4 评论 -
Java+Selenium3框架设计准备篇11-用Log4j实现日志输出
本篇来学习一下,Selenium自动化测试中如何输出日志文件。任何软件,都会涉及到日志输出。所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件。开发通过看日志文件,知道这个崩溃产生的原因,至少知道触发崩溃的条件是什么。同样在自动化测试框架设计,日志文件输出是不可或缺的。我们习惯通过日志输出来记录我们用例执行的情况。当然测试报告更直观,但是如果出现问题,往往是日志文件更有效原创 2017-07-24 22:14:01 · 6146 阅读 · 8 评论 -
Java+Selenium3框架设计准备篇10-用非PageFactory实现POM
前面一篇我们用PageFactory实现了POM,这边我们介绍如果不用PageFactory如何实现POM。1.页面类内容如下package pageObects;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;pub原创 2017-07-19 16:55:36 · 3918 阅读 · 2 评论 -
Java+Selenium3框架设计准备篇9-用PageFactory实现POM
前面介绍了POM的优点和非POM方式写脚本,这篇介绍利用页面工厂类(page factory)去实现POM,通过查看PageFactory类,我们可以知道它是一个初始化一个页面实例的功能,在实例化该页面对象时候,也会一起实例化该页面的元素定位。直接来看看京东登录的例子,如果用POM实现,在测试脚本中实际代码就2行。1.在pageObjects包新建一个京东主页类,代码如下package p原创 2017-07-19 15:51:39 · 7582 阅读 · 17 评论 -
Java+Selenium3框架设计准备篇8-POM简介
页面对象模型(Page Object Model)在Selenium Webdriver自动化测试中使用非常流畅,作为自动化测试工程师应该至少听说过POM这个概念。本篇介绍POM的简介,接下来一步一步告诉你如何在你Java+Selenium3自动化测试框架中实现POM。 Selenium中使用POM的特点和优点?1) POM是一种设计模式,它能帮我们维护代码和减少代码的重复,这个在自原创 2017-07-19 15:24:55 · 6999 阅读 · 0 评论 -
Java+Selenium3框架设计准备篇7-TestNG如何disable一些case
本文继续学习TestNG的知识,有些时候,我们在写脚本的时候暂时不让一些测试用例执行,怎么办呢?有两种方法,代码注销这个用例区域,第二个是去除前面@Test注释,这样testNG运行就不会运行到这部分的代码。除了这两种常规方法,testNG提供了一个enabled的参数,可以设置布尔型,true表示执行该方法,false表示不执行该用例。还是利用前面一篇的测试脚本代码。package le原创 2017-07-19 12:13:06 · 3198 阅读 · 2 评论 -
Java+Selenium3框架设计准备篇6-TestNG执行测试方法依赖关系
本篇介绍TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题。如果不用dependsOnMethods,testNG会自动根据@Test方法名称的首字母排序来执行测试方法。package lessons;import static org.testng.Assert.assertTrue;import org.openqa.selenium.By;im原创 2017-07-18 20:43:29 · 3601 阅读 · 0 评论 -
Java+Selenium3框架设计准备篇5-TestNG实现日志输出
本篇介绍利用TestNG中的Report类来实现简单的log输出,在TestNG中有一个Report的类,这个类的作用是,在添加了@Test的方法里面,通过Report.log("log message")这样的方式,给每个步骤添加日志解释,这些日志解释会显示在TestNG生成的html报告中。废话不多说,直接来看一个例子。package lessons;import org.open原创 2017-07-18 15:49:43 · 4286 阅读 · 3 评论 -
Java+Selenium3框架设计准备篇4-TestNG实现DDT(2)
本篇继续介绍用TestNG和excel文件实现DDT场景。我们需要准备一个test-data.xlsx文件,并且放到eclipse项目下。1.准备test-data.xlsx文件2.利用POI读取excel文件内容,并保存到一个二维数组中。package demo;import java.io.File;import java.io.FileInputStream;impo原创 2017-07-17 23:16:56 · 4862 阅读 · 12 评论 -
Java+Selenium3框架设计准备篇3-TestNG实现DDT(1)
这篇介绍如何利用TestNG实现DDT(数据驱动测试 Data Driver Test),什么是数据驱动测试呢?想想一下这个场景,假如我有50个用户,需要测试登录。你会怎么测试呢。第一个肯定是写50个测试脚本去验证登录。第二个就是采用DDT,把用户名和密码写到一个表格里,然后依次从表格读取去运行这个登录用例。1. 我们来试试2个用户登录,数据存储在二维数组。package lessons;原创 2017-07-15 22:56:13 · 4902 阅读 · 2 评论 -
Java+Selenium3框架设计准备篇2-TestNG通过变量实现启动不同浏览器测试
本篇介绍TestNG中的参数的作用,通过引入参数,来实现启动不同浏览器,一般参数需要在tesgng.xml文件里设置。这里要举例的场景是,我需要同时运行火狐和谷歌浏览器测试脚本。1. 先创建一个TestCrossBrowser.java文件,输入以下内容package lessons;import org.openqa.selenium.WebDriver;import org.op原创 2017-07-14 14:51:44 · 5645 阅读 · 8 评论 -
Java+Selenium3框架设计准备篇1-TestNG简单介绍
前面文章我们运行测试用例都是在main方法下,有没有什么方法不需要用main方法去执行用,这就需要单元测试框架的支持,这篇简单介绍TestNG单元测试框架。1.什么是TestNG你们也许很多人听说过TestNG ,Junit,Nunit 这些工具,也肯定想它们到底有什么区别。1)三者都是独立于测试框架,在市场上都可以免费得到。2)TestNG和Junit在JAVA上使用,Nun原创 2017-07-13 16:43:51 · 9480 阅读 · 2 评论 -
Java+Selenium3方法篇48-如何获取日期和时间
自动化测试也需要用到时间嘛? 当然,最常见的场景就是在开发自动化测试框架里,日志文件和图片保存。图片保存还可以用当前case的方法名,日志文件一般采用当前系统时间命名,前面截图文章,我们把图片命名为error.png,一般来说这样写法是不对的,因为我们写死了,很多情况下我们是借助系统当前时间来区分不同图片或者日志文件。方法Java有这样方法来控制显示时间:Simp原创 2017-07-12 22:43:44 · 3987 阅读 · 0 评论 -
Java+Selenium3方法篇47-字符串切片操作
本篇介绍,自动化测试中关于断言部分,可能经常遇到的场景。从一个字符串中找出一组数字。这个就需要用到字符串切片函数split()。看看这个场景:1. 百度搜索输入 anthony_tester csdn2.点击查询,观察结果3. 观察红圈元素的xpath表达式需要做的事情是:摘取出40,100这个数字。相关selenium自动化脚本如下package lessons;原创 2017-07-11 15:35:16 · 4006 阅读 · 0 评论 -
Java+Selenium3方法篇46-自定义类库解决元素同步问题
前面我介绍了几种关于时间等待的方法,也提到了,在实际自动化测试脚本开发过程,百分之90的报错是和元素因为时间不同步而发生报错。本文,介绍如何新建一个自定义的类库来解决这个元素同步问题。这样,我们在写脚本的时候,就直接调用该类方法就可以。本文的主要学习思想是,学会代码的重构。1. 在新包library下新建我们的自定义类方法。MyWait.java的代码如下:package libr原创 2017-07-10 17:35:54 · 2821 阅读 · 0 评论 -
Java+Selenium3方法篇45-Java中如何读取properties文件内容
前面介绍了如何读取excel和csv文件,本文介绍如何读取properties文件。我们知道一个eclipse工程应该有很多配置文件,有人喜欢把配置文件写到properties里面,也有人喜欢写到xml文件里面。今天我们举例的是如何读取properties文件。1. 准备一个config.properties文件在项目根路径创建一个TestConfig的文件夹,在该文件夹创建一个confi原创 2017-07-10 17:24:44 · 4137 阅读 · 0 评论 -
Java+Selenium3方法篇44-利用opencsv读取csv文件
前面介绍了如何读取excel文件,本篇介绍如何读取vsc文件,什么是csv,它的定义是与逗号分隔的值(Comma-Separated Values),同样的Java中需要用到第三方lib去处理读取csv文件的数据。1.下载opencsv.jar并添加到eclipse项目的lib中http://www.java2s.com/Code/Jar/o/Downloadopencsv23jar.ht原创 2017-07-09 23:27:12 · 3988 阅读 · 0 评论 -
Java+Selenium3方法篇43-利用Jexcel操作2003版本excel
前面介绍了POI可以操作excel,本篇介绍一个其他的可以操作excel的工具,但是这个工具有一个前提,excel文件版本只能是97-2003版本,如果是2007或者以上版本是操作不了的,所以,还是建议掌握POI操作excel文件。不管这个Jexcel只能操作2003版本的excel的一行,我们先来看看如何读取一个2003版本excel内的数据。1. 下载jexcel.jar文件,并添加到ex原创 2017-07-08 23:10:29 · 2040 阅读 · 0 评论 -
Java+Selenium3方法篇42-利用POI读写excel文件
本篇介绍一个第三方工具POI,由于Java的跨平台特性,所以Java没有直接操作excel文件的库支持。在自动化测试,有些我们的测试数据是放到excel文件中,所以需要懂得如何操作获取excel内的内容。1.下载POI打开网站http://poi.apache.org/download.html,选择下面3.16版本下载。选择ZIP包下载。下载完后解压,文件结构如下原创 2017-07-07 16:12:37 · 7856 阅读 · 13 评论 -
Java+Selenium3方法篇41-FluentWait
FluentWait是Selenium中功能强大的一种等待方式,翻译成中文是流畅等待的意思。在介绍FluentWait之前,我们来讨论下为什么需要设置等待,我们前面介绍了隐式等待和显式等待。在现在很多软件产品为了加强前端的效果,采取了大量的AJAX 和Jquery技术,很多窗体内的数据,需要等待一会,才能加载完数据,才能出现一些元素,driver才能操作这些元素做一些事情。还有就是我们做一些操作,原创 2017-07-06 14:32:37 · 5181 阅读 · 1 评论 -
Java+Selenium3方法篇40-谷歌浏览器设置提醒禁用
有时候,我们打开一个网站,会弹窗显示,是否允许该网站发送通知。如果上过facebook就应该见过这样的弹窗,那么我们是否可以通过自动化手段让这种弹窗禁用呢,默认状态是询问,我们需要把询问改成禁用。先看看正常网站打开通知询问弹窗。 我们点击这个上面的叹号图片,可以看到通知这个设置,有询问,允许和不允许三种设置。直接来看看下面selenium脚本如何实现,设置成不允许。packa原创 2017-07-06 10:57:09 · 7066 阅读 · 3 评论 -
Java+Selenium3方法篇39-Explicit wait
本篇我们来讨论Selenium中Explicit wait,我自己翻译成中文的意思就是显式等待,我们很容易就想起了隐式等待implicitlyWait。我们前面介绍了implicitlyWait主要作用是只会检查页面元素展示的元素是否显示,如果该元素没有显示就会报错,提示该元素不可见。而Explicit wait就是设置一个最大时间的,如果超过这个时间,也会报错。主要是有以下场景,我们需要使用Ex原创 2017-07-05 23:42:55 · 4205 阅读 · 4 评论 -
Java+Selenium3方法篇38-AutoIt工具处理文件上传
关于文件上传,这边介绍一个第三方工具,叫AutoIt,简单来说,这个是一个能支持桌面GUI自动化的工具,它支持脚本语言编写。这里,我们用AutoIt来做文件上传的演示。在Selenium脚本中如果需要AutoIt来协助这个文件上传功能,大概步骤是这样的:1. Selenium点击web产品上的文件上传按钮,弹窗上传框。2.执行AutoIt实现准备好的脚本文件,这个脚本文件写了关于上传什么文原创 2017-07-04 23:27:35 · 5769 阅读 · 2 评论 -
Java+Selenium3方法篇37-Robot类处理文件上传
本篇介绍纯Java的方式去处理,web上本地上传图片的功能。这个过程,我们还是需要用到Robot这个类,之前我们用这个类实现了截图的功能。由于在web上点击了本地上传图片后,弹出的框很特殊,selenium无法识别这个弹窗,所以在selnium中没有直接的方法去实现上传本地文件。我们利用Robot的大致流程是这样的:1. 用selnium点击web上本地上传文件的按钮2.在弹窗,文件路径输原创 2017-07-04 17:22:18 · 7041 阅读 · 4 评论 -
Java+Selenium3方法篇36-如何模拟组合键输入
前面介绍了Keys这个类下的一些操作, 这篇介绍一些组合操作。例如Ctrl+A表示全选,Alt+t表示新开一个浏览器tab。在Keys类下有一个方法叫chord(参数1,参数2),从单词的含义来看,表示和谐一致,在键盘输入事件也就是多个键同时按下的效果。1. Ctrl+a,Alt+t的实现package lessons;import org.openqa.selenium.By;im原创 2017-07-04 14:31:33 · 7867 阅读 · 5 评论 -
Java+Selenium3方法篇35-如何点击菜单下子菜单
这篇介绍如何操作菜单下有一个option的菜单,这个控件在前端是这样的,点击一个倒三角,下面有好几个选项。文字描述不够清晰,我们直接看图。我们看到速度选择菜单下有5个菜单,我们用数组遍历的方式来点击Fast这个菜单。package lessons;import java.util.List;import java.util.concurrent.TimeUnit;import原创 2017-07-01 22:19:01 · 7598 阅读 · 7 评论 -
Java+Selenium3方法篇34-如何处理日历控件
这篇介绍webdriver如何处理日历控件,有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据。网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期。这篇,就是介绍用selenium如何自动化脚本实现。1.先看一个完全模仿手工操作的场景,点击输入框,点击下一个月,选择17日。当前是2017=07-01,假如我们要设置成2017-08-17.原创 2017-07-01 21:23:10 · 6413 阅读 · 0 评论 -
Java+Selenium3方法篇33-Actions-拖拽操作
本文补充Actions类中的拖拽操作,之前没有找到相应的demo网站来介绍拖拽操作,今天找到了一个,所以,补上一个Selenium中处理拖拽的场景例子。拖拽的动作定义是,一个元素从起始位置拖动到目标位置,这个过程叫拖拽。直接来看看下面的脚本实现过程。package lessons;import java.util.concurrent.TimeUnit;import org.openq原创 2017-07-01 11:30:32 · 4122 阅读 · 1 评论 -
Java+Selenium3方法篇32-处理不安全连接
本篇介绍webdriver处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打开不安全的链接。举例来说,大家都应该用过12306网站购票,点击新版购票,是不是会出现如下的界面。先来看看chrome上如何处理这个,跳过图中这个步骤,直接到买票页面。package lessons;import org.openqa.selenium.W原创 2017-06-30 22:51:41 · 6775 阅读 · 3 评论 -
Java+Selenium3方法篇31-利用Robot类截图
前面我们介绍了Selenium中TakeScreenshot类来截图,得到的图片是浏览器窗口内的截图。有时候,只截浏览器窗口内的图是不够的,而且TakeScreenshot截图只针对浏览器的web事件,假如你在运行脚本过程,windows上有一个其他软件弹出了一个购物的弹窗页面,这个时候就会干扰你截图。所以,有时候我们需要整个屏幕截图,这个时候我们就需要用到Robot这个类。原理大概是,从电脑屏幕原创 2017-06-29 22:17:48 · 4923 阅读 · 1 评论 -
Java+Selenium3方法篇30-Selenium中截图方法-TakeScreenshot
前面几篇介绍了Actions类中两种方法,本来打算介绍右键,然后类似点击向下箭头这样操作,但是在现在的firefox和chrome都不能正常实现,记得之前selenium2.53是可以在firefox上实现的。本篇介绍Selenium中截图类TakeScreenshout,这个类主要是获取浏览器窗体内的内容,不包括浏览器的菜单和桌面的任务栏区域,我们用百度首页来截图,看看截图效果。原创 2017-06-28 23:33:57 · 13277 阅读 · 9 评论 -
Java+Selenium3方法篇29-Actions-划取字段
本文介绍Actions类下第二个功能,划取字段。我之前做过一个项目,需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能。这篇,就介绍划取字段这个功能,直接看下面的脚本。package lessons;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.sel原创 2017-06-28 22:46:47 · 3205 阅读 · 6 评论 -
Java+Selenium3方法篇28-Actions-鼠标悬停
有些事件,Selenium没有直接提供方法去操作,像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某一个元素上方,然后会出现下拉子菜单,第二种就是在搜索输入过程,选择自动补全的字段。关于鼠标悬停,selenium把这个方法放在了Actions.java文件中,先来看看鼠标悬停出现下拉菜单的情况。package lessons;import java.util.concurren原创 2017-06-27 23:06:38 · 13485 阅读 · 6 评论 -
Java+Selenium3方法篇27-利用JS处理元素高亮显示
这篇来玩一个好玩的测试,就是利用javascript让测试过程中的元素高亮显示,例如在登录框,让输入框背景颜色设置成黄色,边框设置2个像素,颜色是空色。这个问题,我在一家公司的笔试题上看见过,所以这里就实现了测试下。相关脚本如下。package lessons;import java.util.concurrent.TimeUnit;import org.openqa.selenium原创 2017-06-26 22:50:15 · 5621 阅读 · 4 评论