Angular + protractor + mocha

来源:互联网 发布:c语言平方根号怎么表示 编辑:程序博客网 时间:2024/06/08 17:24

前段时间在做E2E测试,项目用的框架是angular,所以就用了官方推荐的protractor。

学习protractor

查看官方文档

全局安装protractor

官方文档上有具体的步骤。
我在安装过程中碰到了如下的问题:
(1) webdriver-manager update 时提示错误 “webdriver-manager: command not found”
解决办法:./node_modules/protractor/bin/webdriver-manager(protractor全局安装的路径) update
(2) webdriver-manager start “Unsupported major.minor version 52.0”
解决办法:升级jdk1.7 到 jdk1.8

protractor.conf.js

常用参数解释
(1) framework: 测试框架jasmine、mocha等
(2) specs: 默认执行的测试

specs: ['e2e/test/*.js']

protractor protractor.conf.js 命令会执行这个配置下的测试
(3) suites: 配置每一个用例单独执行

suites: {   login: 'e2e/test/login_fuction_spec.js'}

protractor protractor.conf.js –suite login 命令会执行login_fuction_spec的测试
(4) directConnect: true/false,true表示直接使用浏览器
(5) capabilities:

capabilities: {   browserName: 'chrome',   chromeOptions: {       args: ['no-sandbox']   }}

browserName:directConnect为true时,使用的浏览器。
(6) mochaOpts: framework是mocha时的参数配置,可以设置超时时间。

mochaOpts: {   reporter: 'spec',   timeout: 60000}

(7)完整的protractor.conf.js

exports.config = {    framework: 'mocha',    seleniumAddress: 'http://localhost:4444/wd/hub',    specs: ['e2e/test/*.js'],    suites: {        login: 'e2e/test/login_fuction_spec.js'    },    directConnect: true,    capabilities: {        browserName: 'chrome',        chromeOptions: {            args: ['no-sandbox']        }    },    mochaOpts: {        reporter: 'spec',        timeout: 60000    }};

断言库

使用chai + chai-as-promised
(1) npm install chai
(2) npm install chai-as-promised
(3) 因为protractor API 返回结果都是promise对象,要直接对结果进行断言,就要用到chai-as-promised。

let cls = element(by.css('.cls'));expect(cls.isPresent()).to.eventually.equal(false);

一般情况

expect(true).to.equal(true);

遇到的问题

(1) window.angular is not defined

describe('BDS login', () => {    protractor.browser.get('http://xxx.com');    it('visible', () => {        let modal = element(by.id('xxx'));        expect(modal.isDisplayed()).to.eventually        .equal(true);                                });}  

window.angular is not defined.
这是因为测试先于页面加载执行了。
解决办法,先保证页面加载完成

describe('BDS login', () => {    before('get page before do test', function () {        protractor.browser.get('http://xxx.com');    });    it('visible', () => {        let modal = element(by.id('xxx'));        expect(modal.isDisplayed()).to.eventually        .equal(true);                                });}  

before/beforeEach

before: 最早执行。在其中可以完成测试的所有前置条件,包括页面加载啊,登录啊。

import { browser, element, by } from 'protractor';let chai = require('chai');let chaiAsPromised = require('chai-as-promised');chai.use(chaiAsPromised);let expect = chai.expect;let login = require('./doLogin');describe('Create Project', () => {    before('before do test', function () {        login.loginsuccess();    });}

beforeEach: 每个用例之前都要执行一次。

原创粉丝点击