使用 Protractor、Cucumber 和 Typescript 开发自动化测试项目

Github Project: https://github.com/lijiachuan1982/protractor-cucumber-typescript

这是一个基础的项目/框架,用来使用 Protractor、Cucumber 和 Typescript 进行自动化测试,使用 Visual Studio Code 做为开发工具。

前提条件

在使用这个框架前,你需要先安装好下边的软件/工具:

快速开始

想要快速尝试该框架并探索 Protractor 和 Cucumber 是如何工作的,可以 clone 这个项目代码:

git clone https://github.com/lijiachuan1982/protractor-cucumber-typescript.git

在 VS Code 中打开下载的文件夹,然后在 VS Code 中打开一个 terminal 窗口(Ctrl+Shift+`)。

因为 protractor 是一个 Node.js 的程序,使用 npm install 安装所有的依赖库。

要运行 Selenium Server,需要使用下边的命令下载相关的二进制文件(第一次安装的时候可能会报错,重新再运行一次应该可以解决问题):

.\node_modules\.bin\webdriver-manager update

使用下边的命令启动 Selenium Server:

.\node_modules\.bin\webdriver-manager start

如果 Selenium Server 成功启动的话,在 terminal 窗口中会看到下边的信息:

[SeleniumServer.boot] - Selenium Server is up and running on port 4444

我们需要保持当前的 terminal 窗口给这个 Selenium Server,点击 terminal 面板中的 “+” 图标打开一个新的窗口。在新的窗口中使用 npm test 来开始一个自动化测试的过程,这个示例会访问 Baidu.com 然后进行一个关键字搜索。检索过程结束后,在 reports 文件夹下会生成 cucumber report 并在 reports\html\screenshots 中存有截图。

背后的逻辑

如果想了解更多的底层的工具和技术,可以继续阅读。在下边的部分中,我们会详细介绍这个框架的不同部分。

Code 结构

Root
+-- .vscode
| +-- settings.json    // VS Code 关于支持 Cucumber 的配置
+-- node_modules       // 通过 npm install 安装的依赖包
+-- outputjs           // 编译后的 .js 文件存放目录
+-- reports            // Cucumber html reports
+-- src                // 源代码
| +--features          // 使用 Gherkin 编写的 Cucumber feature 文件
| +--pages             // Page 对象文件
| +--steps             // Step 定义文件
| +--utils             // Utility 方法
| +--conf.ts           // Protractor 和 cucumber 的配置
| +--reporter.ts       // Cucumber report 的配置和功能
| +--timeout.ts        // Cucumber step 超时配置
| +--typings.d.ts      // .json 的类型文件
+-- testdata           // Json 测试数据
+-- package.json
+-- README.md
+-- tsconfig.json      // Typescript 配置

示例都做了什么

这个示例做了以下三步:

  • 打开 baidu.com 首页
  • 在检索框中输入关键字并点击检索按钮
  • 确认返回的每个检索结果标题中包含关键字

编译 .ts 为 .js

因为我们将所有的源代码放在了 src 文件夹下,所以我们需要让 Typescript 知道只需要把 src 文件夹下的 .ts 文件编译为 .js。需要在 Typescript 的配置文件 tsconfig.jsoncompilerOptions 部分,加入下边的代码:

"rootDir": "src"

为了保持更好的文件夹结构,我们将源代码和生成的 .js 代码分别放在不同的文件夹下。需要在 Typescript 的配置文件 tsconfig.jsoncompilerOptions 部分,加入下边的代码:

"outDir": "outputjs"

Angular 还是 Non-Angular

Protractor 默认会将网站看作是 Angular 的网站,如果你测试一个非 Angular 网站的话,会遇到下边的错误:

Error: Angular could not be found on the page https://abc.com/. If this is not an Angular application, you may need to turn off waiting for Angular.
Please see 
https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular-on-page-load

为了解决这个问题,在 Protractor 的配置文件(conf.ts) 的 onPrepare 部分添加下边的代码:

browser.waitForAngularEnabled(false);

5000 million seconds timeout

Cucumber step 默认会以 5 秒钟(5000 毫秒) 作为超时时长,如果测试的步骤不能在 5 秒中之内完成,会遇到下边的错误:

Error: function timed out, ensure the promise resolves within 5000 milliseconds

为了解决这个问题,创建一个名为 timeout.ts 的文件,用下边的代码设置全局的超时时间:

import { setDefaultTimeout } from "@cucumber/cucumber"

setDefaultTimeout(60 * 1000);

然后在 conf.tscucumberOpts/require 部分添加这个 timeout 文件,所以新的 timeout 时间就会被用在测试当中了。

仅当元素在页面中显示之后再进行操作

当前的网站很多会使用异步的方式来动态加载内容。当我们想要对一个元素进行操作(click、sendkey 等)的时候,我们需要确保这个元素是要在页面中显示的。

这个问题可以通过 protractor 的 ExpectedConditions 以及 presenceOf 的条件来解决。当我们需要找到一个元素的时候,browser 会等到这个元素在页面上出现后才会继续。

这个功能写在了名为 pageElement.ts 的 utils 文件中。可以参考示例的 step definition 来了解如何使用。

Cucumber reporting 和 screenshot

我们使用 cucumber-html-reporter 类库来生成 cucumber reports,并且使用 mkdirp 类库来创建 report 目录(如果它不存在的话)。

Reporting 相关的功能是在 reporter.ts 文件以及 conf.ts 中定义的:

  • cucumberOpts 部分,指定了 report 的格式
  • onPrepare 部分,调用了创建 report 文件夹的功能 Reporter.createDirectory(outputDir)
  • onComplete 部分,调用了创建 report 的功能 Reporter.createHTMLReport()

Screenshot 相关的功能是在 hooks.ts 中定义的,它使用了 Cucumber 的 After hook。在 conf.tscucumberOpts 部分,将 hook 文件添加到了 require 的部分,所以会在程序启动的时候被加载到程序中。

使用 Chai 的 Assertation

我们使用了 Chai 的 assertation 来确定结果是不是跟期望的是一样的。

使用 .json 文件作为测试数据源

为了使用 Json 文件作为测试数据源,我们需要创建一个 typings.d.ts 的文件并把下边的内容放到文件中:

declare module "*.json" {
    const value: any;
    export default value;
}

在代码中,可以使用 import * as keyword from '../../testdata/keyword.json' 将数据引入到代码中。

以上内容参考了一个外国小哥儿的一系列视频:
Protractor e2e testing Intro _ Step by step setup to run tests using typescript

Setup for protractor e2e testing on non angular sites

Handle WebElement using Protractor - Part1 - textbox button and alerts

Handle WebElement using Protractor - Part2 - dropdown and alerts

Handle WebElement using Protractor - Part3 - table or ng-repeater

Implement page object model (POM) in protractor typescript

Utility methods for browser actions in a better way in Protractor TS

Use .JSON and .ts file as test data source for protractor typescript e2e

Cucumber for BDD - Part1

Cucumber for BDD - Part 2 _ All about Gherkin syntaxes

Configuring Protractor with Cucumber in VSCode _ Reporting

Implement Cucumber with PageObjectModel in Protractor

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protractor是一个用于自动化测试Angular应用程序的工具,它基于Selenium WebDriver。它使用TypeScript编写,并结合了Cucumber框架来支持行为驱动开发(BDD)的测试方法。Cucumber是一个行为驱动开发的工具,它使用Gherkin语言编写测试用例。在ProtractorCucumber的结合中,Protractor用于执行测试步骤,而Cucumber用于定义和管理测试用例。 引用\[1\]中的命令行代码展示了如何使用ProtractorCucumber来运行测试。通过运行该命令,Protractor会根据配置文件(config.js)执行测试用例。 引用\[2\]提供了一个示例项目的代码库,你可以克隆该项目并进行尝试。这个示例项目展示了如何使用ProtractorCucumber进行自动化测试。 引用\[3\]展示了示例项目的代码结构。其中,features文件夹存放了使用Gherkin语言编写的Cucumber特性文件,pages文件夹存放了页面对象文件,steps文件夹存放了步骤定义文件,utils文件夹存放了工具方法,conf.ts文件是ProtractorCucumber的配置文件,reporter.ts文件是Cucumber报告的配置和功能文件,timeout.ts文件是Cucumber步骤超时配置文件,typings.d.ts文件是JSON类型文件。 综上所述,ProtractorCucumber结合使用可以实现基于行为驱动开发自动化测试,通过编写Gherkin语言的测试用例,使用Protractor执行测试步骤,并生成Cucumber报告。你可以通过克隆示例项目来进一步了解和探索这个框架的不同部分。 #### 引用[.reference_title] - *1* [debug protractor](https://blog.csdn.net/weixin_34185320/article/details/94148726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [使用 ProtractorCucumberTypescript 开发自动化测试项目](https://blog.csdn.net/li_jiachuan/article/details/118267021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值