Protractor小结
一、简介
Protractor是一个Node.js程序,需要安装Node.js才可运行。Protractor默认使用Jasmine测试框架。Protractor是基于WebDriverJS作了封装。
·Selenium Server
SeleniumServer介于测试脚本(用WebDriver API所写)和浏览器Driver(由WebDriver协议控制)之间,充当代理角色。
Server端转发来自测试脚本的命令给driver,并返回来自driver端的应答给测试脚本。Server端可处理不同语言的测试脚本,也可启动并管理不同版本的多个浏览器。
示意图如下:
[Test Scripts] < ------------> [Selenium Server] < ------------ > [Browser Drivers]
注:当测试Chrome浏览器时,SeleniumServer是可选的,通过配置chromeOnly:true or false来实现。
·浏览器支持
Protractor支持Chrome、FireFox、Safari和IE的最近两个版本,下表是其浏览器支持情况和已知BUG。
Driver |
Support |
Known Issues |
ChromeDriver |
Yes |
|
FirefoxDriver |
Yes |
#480 clicking options doesn't update the model |
SafariDriver |
Yes |
#481 minus key doesn't work, SafariDriver does not support modals, #1051 We see occasional page loading timeouts |
IEDriver |
Yes |
#778, can be slow, #1052 often times out waiting for page load |
OperaDriver |
No |
|
ios-Driver |
No |
|
Appium- iOS/Safari |
Yes* |
drag and drop not supported (session/:sessionid/buttondown unimplemented) |
Appium- Android/Chrome |
Yes* |
|
Selendroid |
Yes* |
*These driversare not yet in the Protractor smoke tests.
·测试框架支持
Protractor支持三种行为驱动开发(BDD)测试框架:Jasmine、Mocha和Cucumber。这些框架基于JavaScript和Node.js,提供语法、脚手架和报告工具便于你编写和管理你的测试脚本。Protractor默认使用Jasmine框架。
二、工作原理
Protractor结合Selenium提供了一个自动化测试基础设施,用以模拟在浏览器或移动设备上运行的Angular应用中的用户交互。
当使用Protractor时,注意这几点:
l Protractor基于WebDriverJS作了封装,其中WebDriverJS是Selenium WebDriver API的JavaScript语言实现;
l WebDriver命令是异步的。他们被安排在一个控制流中,返回promises,而非原始值;
l 测试脚本发送命令给SeleniumServer,按次序跟浏览器Driver通信。
一个使用SeleniumWebDriver的测试涉及三块:测试脚本、Server端和浏览器,三者之间的通信过程如下图:
SeleniumServer关注来自测试脚本的解释命令,将其转发给一个或多个浏览器。Server端和浏览器之间使用WebDriver Wire Protocol,一种JSON协议。转发命令再被浏览器Driver解释。
对于Protractor,测试脚本使用Node.js运行。为确保被测的应用已经稳定,Protractor在浏览器响应操作之前会执行一个额外的命令。举例如下:
element(by.css('button.myclass')).click();
这句测试脚本将会产生三个命令,发送给浏览器Driver:
l /session/:sessionId/execute_async:首先,Protractor告诉浏览器将执行一段JavaScript代码。这是个定制的命令,当应用处理完延时和异步请求,可继续执行测试时,该命令用于要求Angular对此作出应答。
l /session/:sessionId/element:然后,发送定位元素的命令
l /session/:sessionId/element/:id/click:最后发送执行点击操作的命令
三、特性简介
·测试脚本
Protractor运行需要两个文件,测试脚本文件 (spec file)和配置文件
简单的测试文件如下,其中describe函数和it函数是Jasmine框架中的语法,describe定义一个测试案例集,it为单个测试案例。
// spec.js
describe('angularjs homepage', function() {
it('should add one and two', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
element(by.model('first')).sendKeys(1);
element(by.model('second')).sendKeys(2);
element(by.id('gobutton')).click();
expect(element(by.binding('latest')).getText()).
toEqual('5');// This is wrong!
});
});
配置文件如下
// conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
multiCapabilities: [{
browserName: 'firefox'
}, {
browserName: 'chrome'
}]
}
·元素定位
Protractor提供一个全局函数element,使用一个Locator作为参数,返回一个ElementFinder。通过element.all函数可以操作多个元素。其中,ElementFinder有一组action方法,例如click(),getText()和sendKeys()。在Protractor中,所有的action操作都是异步的。
·Locators
一个定位器(locator)告诉Protractor如何找到一个特定的DOM元素,Protractor通过全局对象by来定位。例子如下:
// find an element using a css selector
by.css('.myclass')
// find an element with the given id
by.id('myid')
// find an element with a certain ng-model
by.model('name')
// find an element bound to the given variable
by.binding('bindingname')
locator再作为参数传给element函数,如下:
element(by.css('some-css'));
element(by.model('item.name'));
element(by.binding('item.name'));
·actions
element()函数返回一个ElementFinder对象。ElementFinder对象知道如何使用locator定位DOM元素,但实际还未执行定位。只有等定位元素涉及action方法调用时才会执行。
注:WebElement上任何在WebDriverJS中可执行的action方法在ElementFinder上也可执行。
常用的action方法如下:
var el = element(locator);
// Click on the element
el.click();
// Send keys to the element (usually an input)
el.sendKeys('my text');
// Clear the text in an element (usually an input)
el.clear();
// Get the value of an attribute, for example, get the value of an input
el.getAttribute('value');
既然所有的actions是异步的,所有action方法会返回一个promise。所以,如果要获取一个元素的文本并记录,可以这样实现:
var el = element(locator);
el.getText().then(function(text) {
console.log(text);
});
·定位多个元素
处理多个DOM元素时,使用element.all函数。示例如下:
// Number of elements.
element.all(locator).count();
// Get my index (starting at 0).
element.all(locator).get(index);
// First and last.
element.all(locator).first();
element.all(locator).last();
reference:
l https://github.com/angular/protractor/blob/master/docs/toc.md
l http://ramonvictor.github.io/protractor/slides/#/
l Protractor API:https://github.com/angular/protractor/blob/master/docs/api.md
Protractor小结相关推荐
- 【阶段小结】协同开发——这学期的Git使用小结
[阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...
- php中$_REQUEST、$_POST、$_GET的区别和联系小结
php中$_REQUEST.$_POST.$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载 php中有$_request与$_post.$_get用于接受表单数据,当时他们有何种区 ...
- c cin.get()的用法小结_c语言中static 用法
static在c里面可以用来修饰变量,也可以用来修饰函数. 先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. int a ; int ...
- linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结
Linux下常见文件格式的压缩.解压小结 .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ...
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...
- flash 入门课知识小结
一. 几种类型帧的小结:(关键帧.空白关键帧.普通帧) 1. 特点 帧--是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以 ...
- Eigen/Matlab 使用小结
文章目录 [Eigen Matlab使用小结](https://www.cnblogs.com/rainbow70626/p/8819119.html) Eigen初始化 0.[官网资料](http: ...
- MATLAB【十三】————仿真函数记录以及matlab变成小结
part one:matlab 编程小结. 1.char 与string的区别,char使用的单引号 '' ,string使用的是双引号"". 2.一般标题中的输出一定要通过 nu ...
- oracle @spool,Oracle spool 用法小结
Oracle spool 用法小结 转自:http://wallimn.javaeye.com/blog/472182 对于SPOOL 数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句 ...
最新文章
- VS2017源代码版本管理
- Python基础概念_12_编程风格
- rocketmq怎么保证数据不会重复_rocketmq如何保证消息不丢失
- Qt中为自己的程序建立一个消息循环
- MATLAB保存当前窗口图像
- fft之后求模值和相位_如何利用相位噪声测量表征时钟抖动来加速设计验证过程...
- 04_Spring中使用Quartz
- 苹果官网再度开售iPhone SE:这是在为新品清库存了?
- 使用github找资源
- Python+PyCharm+PyQt5抓取链家二手房信息
- 从智能交通案例看物联网成功的关键
- Excel的统计字符数
- Latex常用数学公式整理——导数
- HTML两张图片翻转,canvas实现图片镜像翻转的2种方式
- 978_使用emacs lisp安装emacs插件
- spry菜单栏(一)
- [自考总结]考的全没背,背的全没考是一种什么体验
- Office VBA开发经典-中级进阶卷(75元包邮)
- oh-my-posh安装过程问题及注意事项
- RK3399平台开发系列讲解(内核入门篇)1.2、如何高效的阅读Linux内核设备驱动