Angular + protractor + mocha

前段时间在做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: 每个用例之前都要执行一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Angular是一个流行的JavaScript框架,用于构建Web应用程序。Ionic是基于Angular的开源移动应用开发框架,它提供了一套UI组件和具,帮助开发者构建跨平台的移动应用程序。 Swiper是一个流行的移动端滑动组件库,它提供了丰富的滑动效果和交互功能,可以用于创建漂亮的轮播图、图片浏览器等。 结合Angular和Ionic,你可以轻松地集成Swiper组件到你的移动应用中。首先,你需要在你的Angular项目中安装Swiper组件库。可以使用npm命令来安装: ``` npm install swiper --save``` 安装完成后,你可以在你的Ionic组件中引入Swiper组件,并在模板中使用它。以下是一个简单的示例: ```typescriptimport { Component } from '@angular/core'; import SwiperCore, { Navigation, Pagination } from 'swiper/core'; SwiperCore.use([Navigation, Pagination]); @Component({ selector: 'app-swiper', template: ` <swiper [navigation]="true" [pagination]="true"> <ng-template swiperSlide>Slide1</ng-template> <ng-template swiperSlide>Slide2</ng-template> <ng-template swiperSlide>Slide3</ng-template> </swiper> `, }) export class SwiperComponent {} ``` 在上面的示例中,我们首先引入了Swiper组件库,并注册了所需的Swiper模块(例如Navigation和Pagination)。然后,在组件的模板中,我们使用`<swiper>`标签创建了一个Swiper实例,并在内部添加了三个滑动的内容块。 你可以根据你的需求自定义Swiper的配置和样式。更多关于Swiper的用法和配置,你可以参考Swiper官方文档。 希望这可以帮助到你!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值