对于自动化测试,尤其是UI的自动化测试。是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一。

 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论。但是,让测试人员解放生产力,提高效率,把精力关注与最为重要的核心业务逻辑与测试设计上,是每个测试团队所必需要关注的。因此,在适当的范围内开展自动化测试,是可以提高整个测试团队的生产率的。

 对于Selenium,这个东西是一个浏览器应用程序测试工具。之所以选择它做WebUI的自动化测试主要是因为它有以下两大优势:

1.直接在浏览器中运行,就像真实用户所做的一样,可以模拟终端用户的操作,从最终客户的角度来测试应用程序。(这一点和黑盒功能测试很像吧。)

2.可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。(嗯,多面能手)

对于Java语言,我只想说你用你最拿手的就好。一个好的测试人员,不应该被开发语言所束缚。不管是Java/Python/Ruby/C#.........只要你熟悉,就尽量把它用起来吧。语言只是工具。

接下来,我们好好的慢慢的理解一些东西,然后来逐步的去写一点东西,来认识一下自动化测试框架是个什么东西。

 PS:阅读本文的同学,希望拥有JAVA语言编程基础,了解基本的JAVA语法与数据结构,同时,对Selenium的基本API有所了解。

 在写这个框架之前,我们要明确我们主要操作的对象是什么。------->页面元素。

我们要了解java在使用selenium时的基本操作。例如,使用以下代码:

driver.findElement(By.xpath("/html/body/div/div/div[2]/form/button")).click();

在这里,driver的意思是定义的WebDriver,findElement是driver这个对象调用的方法----->寻找页面元素,By.xpath是定位页面元素的方式,(“/html/body/div/div/div[2]/form/button”)是定位页面元素的参数,

.click()是找到页面元素后的动作------->点击。

那么,我们在这里考虑一下。对于通常的黑盒功能测试中,我们想在网页上面去找一个地方,进行点击或者输入文字等操作的时候,

我们一般会这样说:“用户名输入admin,密码是abcd”。

但是对于测试的代码来说,实际上有可能是:“找到页面元素ID是UserId的元素,使用sendKeys方法,参数为admin,找到页面元素ID是Password的元素,使用sendKeys方法,参数是abcd”。

需要解决的问题:

用户名(我们说的)--------->找到页面元素ID是UserId的元素(代码),输入admin(我们说的)--------->使用sendKeys方法,参数为admin。(代码)

一个页面元素的寻找需要几个要素,寻找的方式,寻找的参数,等待的时间。另外,为了我们说的话,代码能够明白,需要加上一个名字,用来告诉代码。

我们需要自己定义一个类,这个类就是页面元素类。通过上面的说明,我们知道这个类中需要定义的基本变量。(定位方法,路径,名字),另外,寻找路径需要时间,我们再加上一个时间。

package webui.xUtils;

public class Position {
  private String path; //----->路径
//位置名字,就是我们通常意义上叫的名字。例如:用户名输入框
  private String positionName;
  private ByType type;//定位方法
  private int waitSec;//等待时间   //selenium的基本八种定位方法。
  public enum ByType{
   xpath,id,name,className, cssSelector,tagName, partialLinkText,linkText
  }   public String getPath() {
    return path;
  }   public void setPath(String path) {
    this.path = path;
  }   public String getPositionName() {
    return positionName;
  }   public void setPositionName(String positionName) {
    this.positionName = positionName;
  }   public ByType getType() {
    return type;
  }   public void setType(ByType type) {
    this.type = type;
  }   public Position(String path, ByType type, String positionName) {
    super();
    this.path = path;
    this.positionName = positionName;
    this.type = type;
  }
  //这种可以看作是针对iframe的情况
  public Position(String path,String positionName) {
    super();
    this.path = path;
    this.positionName = positionName;
  }   public Position(String path, int waitSec, ByType type, String positionName) {
    super();
    this.path = path;
    this.waitSec = waitSec;
    this.positionName = positionName;
    this.type = type;
  }   public int getWaitSec() {
    return waitSec;
  }   public void setWaitSec(int waitSec) {
    this.waitSec = waitSec;
  }
}

使用上面的代码,我们就定义了最初的一个Position类,这就是我们要寻找的页面元素。

基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器的更多相关文章

  1. 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample

    到目前为止,我们所写的东西,都是集中在如何使用Selenium和Java来定位和读取元素.那么,到底如何具体开展测试,如何实现参数化,如何实现判定呢?下面,我们来看看Java应用程序的测试框架吧. 当 ...

  2. 基于Java+Selenium的WebUI自动化测试框架(十三)-----基础页面类BasePage(Excel)

    前面,我们讲了如何使用POI进行Excel的“按需读取”.根据前面我们写的BasePageX,我们可以很轻松的写出来基于这个“按需读取”的BasePage. package webui.xUtils; ...

  3. 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)

    我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...

  4. 基于Java+Selenium的WebUI自动化测试框架(六)---浏览器初始化

    本篇我们来讨论,如何写一个浏览器初始化的类.在写之前,先思考一下,我们需要一个什么样的初始化? 先来看看使用原生的Java + selenium是怎么做的.(以firefox为例) System.se ...

  5. 基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)

    之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类.下面,我们来进行一些扩展,通过Excel来读取页面元素. Excel的使用,大多数人应该都不陌生.那么Java读取Exce ...

  6. 基于Java+Selenium的WebUI自动化测试框架(九)-----基础页面类(BasePage)

    上篇我们写了java读取xml文件的类,实现了可以从xml文件读取元素的方式.那么,接下来我们需要考虑一个问题.我们拿了这些元素之后怎么去操作呢? 先来看看我们手工测试的时候是怎么进行的. 双击浏览器 ...

  7. 基于Java+Selenium的WebUI自动化测试框架(五)------页面操作实现类

    在编写完Log类和监听类之后,终于要回到正轨上来了.我们继续开始写UIExcutor的实现类. PS:如果你想让你的报告更加美观一些.推荐使用reportNG这个jar包. 在项目中导入reportn ...

  8. 基于Java+Selenium的WebUI自动化测试框架(二)-----页面操作接口

    在有了基础的Position类之后,我们需要考虑我们在寻找完页面元素之后,需要做什么.这个“做”什么,可以理解为我们在页面上需要对应的一系列动作.比如:点击,输入,切换窗口,寻找元素,判断元素是否存在 ...

  9. 基于Java+Selenium的WebUI自动化测试框架(十一)-----读取Excel文件(POI)(1)

    上一篇说了利用JXL的jar包来读取Excel的代码.在Java中,还可以用另外一种jar包来读取Excel的内容,那就是Apache的POI. 这里和之前一样,需要导入POI的jar包,建议导入这三 ...

随机推荐

  1. Jenkins集成TestNG

    1.Jenkins安装插件 TestNG Results Plugin 2. 添加配置 “构建后操作”->“Publish TestNG Results” 保持默认配置即可 3.查看报告 项目构 ...

  2. (CSDN 迁移) jFinal找不到或无法加载主类

    错误: 找不到或无法加载主类 com.demo.common.DemoConfig 项目上右键 -> Build Path -> Order and Export 修改顺序: 从上到下依次 ...

  3. ThinkPHP3(结构,路由,模板的调用,后台搭建,系统常量)

    ThinkPHP的结构如下: 在ThinkPHP\Library\Think文件夹中,几个重要的文件 1.App.class.php 框架核心类文件 2.Think.class.php 每次请求都要执 ...

  4. Visual Studio 2019激活

    Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional NYWVH-HT ...

  5. 小菜鸡deepin系统手动更新火狐浏览器

    前言 Deepin 是个好系统,让我看到国产系统的希望,也让我看到Linux桌面化和大众化的可能(如果你想抬杠:Deepin只是Linux魔改没什么好显摆的.那--你开心就好 ^ _ ^ ).虽然有一 ...

  6. LOJ2401 JOISC2017 Dragon2 计算几何、线段树

    传送门 先考虑每一个攻击方的龙和被攻击方的龙可以与多少个被攻击方/攻击方的龙匹配. 对于攻击方的龙\(A\)和被攻击方的龙\(B\),在道路为线段\((C,D)\)的情况下,能够与下图位置的所有对应属 ...

  7. 应用中有多个Spring Property PlaceHolder导致@Value只能获取到默认值

    背景 工作中负责的一套计费系统需要开发一个新通知功能,在扣费等事件触发后发送MQ,然后消费MQ发送邮件或短信通知给客户.因为有多套环境,测试时需要知道是从哪套环境发出的邮件,又不想维护多套通知模板,因 ...

  8. Go内存分配器可视化指南【译】【精】

    当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂.一切看起来都像一个神秘的黑盒子.因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥 ...

  9. map小列

    // 有关学生信息的头文件student.h代码如下 #include #include using namespace std; struct Student                    ...

  10. java实现顺序表、链表、栈 (x)->{持续更新}

    1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...