使用protractor操作页面元素「建议收藏」

使用protractor操作页面元素「建议收藏」Protractor是为AngularJS应用量身打造的端到端测试框架。它可以真实的驱动浏览器,自动完成对web应用的测试。Protractor驱动浏览器使用的是WebDriver标准,所以使用起来与其他语言实现的WebDriver库大体相同。当然,我说大体相同那肯定还是有不同的地方。一旦不注意这些不同的地方就会坑到你(我就被成功坑过,所以才有了这篇文章)。Protractor编写测…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定
Protractor是为Angular JS应用量身打造的端到端测试框架。它可以真实的驱动浏览器,自动完成对web应用的测试。Protractor驱动浏览器使用的是WebDriver标准,所以使用起来与其他语言实现的WebDriver库大体相同。当然,我说大体相同那肯定还是有不同的地方。一旦不注意这些不同的地方就会坑到你(我就被成功坑过,所以才有了这篇文章)。

Protractor编写测试的核心是查找DOM元素,与其交互,然后查看交互后的状态与你的期望是否一致。所以查找DOM元素并与之交互显的非常重要。Protractor提供了一个全局函数element,其接受一个Locator对象并返回一个ElementFinder对象。该函数会返回单个元素。如果你想返回多个元素,可以使用element.all函数,其接受一个Locator对象并返回ElementArrayFinder对象。ElementFinder对象有一组方法,用于元素交互,比如click(),getText(),sendKeys等。

Locator对象的创建主要使用全局的by对象,其提供一些API来生成Locator对象以供element或element.all函数使用。

比如:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

//根据class名来查找元素 by.css(‘myclass’) //根据id来查找元素 by.id(‘myid’) //根据ng-model名来查找元素 by.model(’name’) //查找绑定了指定名的元素 by.binding(‘bindingname’) //查找指定repeater中的元素 by.repeater(‘myrepeater’)

可以看出前两个Locator的创建方法与其他语言实现的WebDriver的用法基本一样,而后几个则专为AngularJS应用设计的,方便在基于AngualrJS框架下写的web应用中查找页面元素。这是第一处不同。

另一处不同其他语言实现的WebDriver库使用Locator找到的元素类型是WebElement,而Protractor则返回的是ElementFinder对象。两者不同之处是在于ElementFinder对象不会立即与浏览器交互,根据指定的Locator来查找到页面上的元素;而只有当你调用了ElementFinder对象的方法时,它才会真正的与浏览器进行交互。一些常用的方法有以下所示。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

//这时不会与浏览器交互获取元素信息 var el = element(by.css(‘mycss’)); //点击元素 el.click(); //给该元素输入内容 el.sendKeys(’text’); //清空元素内内容 el.clear(); //获取指定属性的值 el.getAttribute(‘value’); //获取元素的文本值 el.getText();

请注意这些方法都是异步的。所有的方法返回的是一个promise(我就吃过这个亏,以为返回的是值)。所以比如你想输出一个元素的值,应该这么写:

1 2 3

element(by.css(‘myclass’)).getText().then(function(text) { console.log(text); }):

如果你使用expect方法来验证元素的值时,expect方法会帮你取出promise中值,所以你只用这么写:

1

expect(element(by.css(‘myclass’)).getText()).toEqual(‘确定’);

还有不同的地方在于Protractor支持对元素查找时进行链式调用。这样的功能相当实用。你可以组合element和element.all两个函数来定位元素。并且Protractor还提供了几个辅助方法来更方便你的使用。

1 2 3

element.all(locator1).first().element(locator2); element(locator1).all(locator2); element.all(locator1).get(index).all(locator2);

element.all函数提供的辅助方法有:

filter: 提供一个过滤器过滤其中的元素。

1 2 3 4 5

element.all(by.css(‘myclass’)).filter(function(ele, index) { return ele.getText().then(function(text) { return text == ‘确定’; }); });

get: 根据索引获取指定元素。如 element.all(by.css(‘myclass’)).get(0);

first: 获取第一个元素。 element.all(by.css(’myclass’)).first();

last: 获取最后一个元素,用法同上。

count:获取元素个数。

此外还提供了each,map,reduce等方法对列表进行各种操作。

element函数提供的辅助方法有:

locator: 返回locator对象。

getWebElement: 返回该ElementFinder包裹的WebElement对象。

all: 查找其一组子元素。

element: 查找其子元素。

isPresent: 元素是否在页面上展示。

总结起来,Protractor与其它的WebDriver语言实现的区别如下:

Protractor专为AngualrJS应用定制,其自身包含了很多wait操作,保证AngularJS脚本执行完毕后才进行下一步操作,保证了测试的稳定性与健壮性。

Protractor设计的By对象针对AngularJS应用提供了很多实用方法,在定义AngularJS应用页面时更加轻松。

element函数返回的是ElementFinder对象,其不会立即与浏览器交互,除非调用ElementFinder对象的方法。

调用ElementFinder对象的方法返回的是一个promise。(这点很重要)

Protractor在定位元素时支持链式调用。

本文转自: [url]http://www.fwqtg.net/%E4%BD%BF%E7%94%A8protractor%E6%93%8D%E4%BD%9C%E9%A1%B5%E9%9D%A2%E5%85%83%E7%B4%A0.html[/url]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216259.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 跨站脚本攻击_XSS(跨站脚本攻击)漏洞解决方案

    java 跨站脚本攻击_XSS(跨站脚本攻击)漏洞解决方案首先 简单介绍一下 XSS 定义 一 XSS 介绍 XSS 是跨站脚本攻击 CrossSiteScr 的缩写 为了和层叠样式表 CSS CascadingSty 加以区分 因此将跨站脚本攻击缩写为 XSS XSS 是因为有些恶意攻击者往 Web 页面中插入恶意 Script 代码 当用户浏览该页面时 嵌入的 Script 代码将会被执行 从而达到恶意攻击用户的特殊目的 二 XSS 攻击目

    2025年7月28日
    2
  • 树莓派连接wifi个人热点和远程windows远程登录

    树莓派连接wifi个人热点和远程windows远程登录1.安装完系统后在该目录下新建wpa_supplicant.conf文件填入以下信息country=CNctrl_interface=DIR=/var/run/wpa_supplicantGROUP=netdevupdate_config=1network={ssid="WiFi-A"psk="12345678"key_mgmt=WPA-PSKpriority=1}…

    2022年5月5日
    79
  • Spock单元测试框架使用详解「建议收藏」

    Spock单元测试框架使用详解「建议收藏」Spock(Spock官网:http://spockframework.org/)作为java和Groovy测试一种表达的规范语言,其参考了Junit、Groovy、jMock、Scala等众多语言的优点,并采用Groovy作为其语法,目前能够在绝大多数的集成开发环境(如eclipse,Intellij Ieda),构建工具(如Maven,gradle)等场景运行。Spock单元测试相对于传统的junit、JMockito、EsayMock、Mockito、PowerMock,由于使用了Groovy作为语法

    2022年6月17日
    65
  • 数据库设计 ER图

    数据库设计 ER图一、ER图简介ER图,简单来说,E是实体,实体有一组属性;R是关系。找打系统中的实体以及实体关系就可以绘制出ER图了。例如,下图是网上找到的ER图,矩形的是实体,椭圆是属性,实体何实体时间的关系用菱形,关系也有熟悉,例如,学生选修课程,有成绩属性,当然如果系统需要,也可以记录选修的时间等属性信息。认真看下,你会发现ER图理解起来还是比较容易的二、ER图绘制常见问题但是真的落实到自己绘制,很多同学就会遇到困难。下面我们通过反例来学习ER图1.反例1区分功能和关系.

    2022年6月21日
    40
  • 开源在线客服系统源码h5|thinkphp在线客服完整源码|网页在线客服源码

    开源在线客服系统源码h5|thinkphp在线客服完整源码|网页在线客服源码前言:法国阿纳托尔曾经说过:企业客服人员早上醒来后通常做的第一件事就是检查手机,看看是否有顾客发来的重要信息,这种行为已经成为我们日常生活方式的一部分。不管原因是什么,我们都有一套日常使用的通信工具电子邮件、电话、网络会议工具或社交网络。对于一个高效运行的企业而言,拥有一套好的源码搭建的在线客服系统,对于提供企业运行效率至关重要!随着流感大流行使在家工作成为一种新的常态,我们面临着前所未有的沟通方式的变化,这使得这些工具不仅是必不可少的,而且现在是必需的。正文:搭建在线客服系统软件的必要性:基于t

    2022年7月19日
    13
  • mybatis返回两个字段数据_java接口接收json数据

    mybatis返回两个字段数据_java接口接收json数据pg数据库中某字段类型为jsonJava实体中对应类型是jsonObject privateJSONObjectinfo;在mybatis的xml中,常规无法直接进行映射,需要自己写一个TypeHandler,自定义一个JSONTypeHandlerPg类具体代码:packagecom.geovis.common.config;importjava.sql.Callable…

    2025年9月11日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号