之前我们介绍了如何测试某段js代码的逻辑是否正确,考虑的情况是否全面,但是在ui界面上我们每次做好的功能都要自己去填写内容,点击按钮等,那么是否存在自动化测试的工具呢,让这些事情可以自动完成,答案是肯定的,今天我们就来讲解如何自动测试我们界面上的功能。

1.安装依赖文件

  在任意的地方创建新的文件夹,例如test,进入到文件夹里,打开命令行或者gitbash;

  <1>安装protractor

npm install -g protractor

  <2>安装karma-jasmine

npm install --save-dev karma-jasmine

  <3>webdriver-manager 驱动

webdriver-manager update //浏览器的驱动

  <4>安装javaJDK

  由于运行的时候需要java环境,所以需要安装javaJDK,http://blog.csdn.net/bingiser/article/details/53375282,这个网址很详细的介绍了如何一步一步安装javaJDK。

2.简单介绍karma-jasmine的语法

  由于之前的单元测试介绍过karma-jasmine,所以这里简单介绍,如果有人没看过,去这里看 ,http://www.cnblogs.com/zhenfei-jiang/p/7027948.html

describe("测试加法", function () {//describe就是对这次测试的整体描述,如:加法测试
it("3+5=8", function () {//it是对个测试的描述,如:3+5应该等于8
expect(add(3, 5)).toEqual(8);//期待add(3,5)的结果等于8
});
});

3.介绍几个常用的protractor api 具体的api去网站  http://www.protractortest.org/#/api,需要翻墙。

  1. browser.get('http://baidu.com')导航到当前页面
  2. element找到元素
  3. element.all找到元素集合
  4. by 查找元素
    * by.binding : ng-bind, {{}}
    * by.model : ng-model       //例子:element(by.model('name')).sendKeys('haha'),就是找到含有ng-model="name"的输入框然后填写haha;
    * by.repeater : ng-repeater
    * by.id : id选择器      //id选择器
    * by.css : css选择器
    * Array.get(2) : 选择第2个      //获取元素的第二个,因为可能某种选择器会得到很多的元素
  5. click 点击事件     //element(by.cssContainingText("button","OK")).click(),选择button的内容是OK的按钮点击
  6. sendKeys 书写内容
  7. 获取信息,判断
    * getText 获取文本
    * getSize 获取尺寸
    * getAttribute 获取属性
  8. getTitle
  9. sleep
  10. brower.wait()等待某元素出现   //这个常用的是跳转页面的时候要等待下一个页面某个元素出来才可以操作

4.编写你的protractor_conf.js

exports.config = {
directConnect: true,
capabilities: {
'browserName': 'chrome',
},
specs: ['applications-test.js'], //运行的测试文件地址
//framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
},
//输出测试报告
//onPrepare: function(){
// jasmine.getEnv().addReporter(
// new Jasmine2HtmlReporter({
// savePath: 'e2e/',
// takeScreenshots: true, //是否截屏
// takeScreenshotsOnlyOnFailures: true //测试用例执行失败时才截屏
// })
// );
//}
};

5.编写的测试代码

describe(" checkoutLogin", function() {
it('进入登入界面',function(){
browser.get("http://localhost:106/#/login");//首先进入到这个网址
}) it('登入',function(){
browser.wait(function () {//然后等待这个网页出现了ng-model="form.password"这个选择器,再执行其他的操作
       return browser.isElementPresent(by.model("form.password"));//直到这个选择器的元素存在的时候
     }, 2000);
     element(by.model("form.username")).sendKeys("admin")//给ng-model="form.username"填写admin
     element(by.model("form.password")).sendKeys("admin") //给ng-model="form.password"填写admin
     element(by.css("input.loginbtn")).click()  //点击登入这个按钮
   })
})

6.启动命令

  <1>启动浏览器驱动  当前文件夹下打开cmd命令行或者gitbash

webdriver-manager start

  <2>启动测试代码  当前文件夹下打开另一个cmd命令行或者gitbash

protractpr protractor_conf.js

就可以看到自动会启动一个页面,跳转到你测试代码的地址,进行你一系列的操作。

7.踩过的坑

  <1>最好在你的protractor_conf.js的 browserName填写“chrome”,因为火狐的浏览器(firefox)可能存在报错的问题,并且你的chrome的版本需要高于58。

  <2>你的页面假设有透明的地方可能会遮住你的按钮,那么会导致你的按钮点击不到报错

端到端测试,protractor测试的教程的更多相关文章

  1. 最受欢迎的5款Node.js端到端测试框架

    测试,尤其是自动化测试在现代 WEB 工程中有着非常重要的角色,与交付过程集成良好的自动化测试流程可以在新版发布时帮你快速回归产品功能,也可以充当产品文档.测试因粒度不同又可以分为单元测试.接口测试. ...

  2. 端到端测试工具--testcafe

    写在前面 随着业务的增加,复杂性的增加,我们更需要保证页面不能出错,之前需要每次上线之前需要每次人工测试,如果有好多改动,为保证业务不出错,需要耗费更多的时间来测试,所以我们需要写一些测试来保证业务的 ...

  3. 脚手架vue-cli系列五:基于Nightwatch的端到端测试环境

    不同公司和组织之间的测试效率迥异.在这个富交互和响应式处理随处可见的时代,很多组织都使用敏捷的方式来开发应用,因此测试自动化也成为软件项目的必备部分.测试自动化意味着使用软件工具来反复运行项目中的测试 ...

  4. cypress 端到端测试框架试用

    cypress 包含的特性 端到端测试 集成测试 单元测试 安装 yarn add cypress --dev 运行测试项目 初始化项目 yarn init -y 安装cypress yarn add ...

  5. 前端端对端测试:基于PhantomJS的CasperJS

    简介 Casperjs是一个基于PhantomJS和SlimerJS的前端端对端测试框架,当然你也可以使用它完成网络爬虫功能,它的特点的通过简单的脚本模拟浏览器行为, 主要有casper.tester ...

  6. Cypress与TestCafe WebUI端到端测试框架简介

    近期接触了Cypress和TestCafe,两个测试框架都基于Node.js,都不再使用Selenium+WebDriver,而且开箱即用,非常轻量级,就冲着不再使用WebDriver这一点,极大地勾 ...

  7. 前端测试框架Jest系列教程 -- 简介

    写在前面: 随着互联网日新月异的发展,用户对于页面的美观度,流畅度以及各方面的体验有了更高的要求,我们的网页不再是简单的承载文字,图片等简单的信息传递给用户,我们需要的是更加美观的页面展示,更快的浏览 ...

  8. 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)

    写在前面: 在JavaScript代码中,异步运行是很常见的.当你有异步运行的代码时,Jest需要知道它测试的代码何时完成,然后才能继续进行另一个测试.Jest提供了几种方法来处理这个问题. 测试异步 ...

  9. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  10. 前端测试框架Jest系列教程 -- Mock Functions

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...

随机推荐

  1. C#里的指针

    最近在复习C#基础这里,发现指针运算方式跟引用类型运算方式很相像. 指针里面存放的是表示内存地址的一段整数,所以任何整数类型指针之间都可以相互转换,因此带来了不安全性. ; long* b = &am ...

  2. LeetCode 876——链表的中间结点

    1. 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形 ...

  3. Dijkstra模板 dj斯特拉

    图论里非常常用的dijkstra,自己加了个路径查找,做个模板吧: ; struct Edge { int from,to,dist; Edge(int u, int v, int d):from(u ...

  4. redis基础和通用key操作

    redis是什么? redis开源的,构建于内存的数据结构的nosql数据库.常被用于数据存储,缓存处理和消息处理. redis的优势? 1.极高的读写能力 2.丰富的数据类型 3.原子性操作 4.支 ...

  5. 并查集——hdu1232(入门)

    传送门:畅通工程 实质是求连通分支的数量 #include <iostream> #include <cstdio> #include <algorithm> us ...

  6. C++结构体排序

    在C++中,对结构体的排序方式比C语言丰富的多.在C语言中,我们主要是通过qsort进行排序操作(抛开手写排序算法不说). 在C++<algorithm>中,有一个十分强大的排序函数sor ...

  7. lintcode-92-背包问题

    92-背包问题 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 注意事项 你不可以将物品进行切割. 样例 如果有4个物品[2, 3, 5, 7] 如果背包 ...

  8. 一个flink作业的调优

    最近接手了一个flink作业,另外一个同事断断续续有的没的写了半年的,不着急,也一直没上线,最近突然要上线,扔给我,要调通上线. 现状是: 1.代码跑不动,资源给的不少,但是就是频繁反压. 2.che ...

  9. 【bzoj5070】危险的迷宫 费用流

    题目描述 JudgeOnline/upload/201710/55.doc 输入 第一行是两个整数A与B(1≤A,B≤10),中间用空格分隔,表示该迷宫是A行B列的. 第2行至第A+1行,每行有B个1 ...

  10. mac 倍速播放

    Mac的倍速播放,使用工具播放是quick time player,使用方式是,按住 “option” + “>>” 即可调整倍数: