cucumber并发java_行为驱动:Cucumber + Selenium + Java(二) - 第一个测试

2023-10-11 20:20

本文主要是介绍cucumber并发java_行为驱动:Cucumber + Selenium + Java(二) - 第一个测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上一篇中,我们搭建好了Selenium + Cucumber + Java的自动化测试环境,这一篇我们就赶紧开始编写我们的第一个BDD测试用例。

2.1 创建features

我们在新建的java项目中,新建一个文件夹名为features,然后右键点击该文件夹,新建一个名为test.feature的新文件。

文件建好后,你会看到他呈现出与普通文本文件不同的样式,并且自带很多内容:

4d2d3de84baf5ced4831dc547358ffcc.png

这些内容实际是cucumber给我们提供的feature模板,我们按照这个模板写出第一个测试用例。

我们用自然语言,结合Given,When,And,Then这些关键字来编写测试用例:

Feature: Test baidu search for selenium

Search for selenium on baidu

@tag

Scenario: Test Baidu search for selenium

Given I navigate to baidu

When I send keyword into searchbox

And I click search button

Then The correct search result is returned

可以看到,这个用例就是用自然表述性语言撰写的,具有很高的可读性,不需要懂代码也都能看明白这个用例测试的内容:就是去到百度,然后搜索关键字,判断搜索是否成功。

2.2 创建runner

这个用例既然是自然语言撰写的,也就还暂时不能实现自动化执行,我们接下来还要编写这个用例对应的实际selenium java代码的实现过程,其实就是用java对我们的用例进行“翻译”,好让selenium能读懂,并进行测试的执行。

首先,在src目录下新建package名为runner,然后新建一个java class名为cucumberRunner,这个类里面我们写入如下代码:

packageRunner;importorg.junit.runner.RunWith;importcucumber.api.CucumberOptions;importcucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)

@CucumberOptions(features=("features"),glue=("stepDefinition"))public classCucumberRunner {

}

这个类主要起的作用实际上就是我们cucumber的执行入口,同时他定义了cucumber用例执行时的一些特性,比如CucumberOptions标签里,features指定用例文件的目录,glue则指定对应java翻译代码的位置。写好这个类以后,我们可以马上右键对他点击,运行Run As -> JUnit Test。运行之后,系统输出了一些日志:

f1dcd510f1fd5c3288e6cecc94467094.png

从日志里面我们可以看到,系统提示:我们定义了4个测试步骤,但都没有实现,下面我们马上来实现这些步骤。

2.3 实现步骤定义

在src目录下新建stepDefinitions包,然后在包下新建一个java class名为TestBaidu,这个类里面我们就实现之前的feature里面定义的测试步骤。

我们输入如下代码:

packagestepDefinitions;importjava.util.concurrent.TimeUnit;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.FirefoxDriver;importorg.testng.Assert;importcucumber.api.PendingException;importcucumber.api.java.en.Given;importcucumber.api.java.en.Then;importcucumber.api.java.en.When;public classTestBaidu {

WebDriver driver;

@Given("^I navigate to baidu$")public void i_navigate_to_baidu() throwsThrowable {

driver= newFirefoxDriver();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

driver.manage().window().maximize();

driver.get("http://www.baidu.com");

}

@When("^I send keyword into searchbox$")public void i_send_keyword_into_searchbox() throwsThrowable {

WebElement searchBox;

searchBox= driver.findElement(By.id("kw"));

searchBox.sendKeys("selenium");

}

@When("^I click search button$")public void i_click_search_button() throwsThrowable {

WebElement searchButton;

searchButton= driver.findElement(By.id("su"));

searchButton.click();

}

@Then("^The correct search result is returned$")public void the_correct_search_result_is_returned() throwsThrowable {

WebElement searchResult;

searchResult= driver.findElement(By.xpath(".//*[@id='container']/div[2]/div/div[2]/span"));

Assert.assertTrue(searchResult.isDisplayed());

Thread.sleep(2000);

driver.quit();

}

}

写好以后,再次运行runner类,可以看到测试执行成功了:)

947cf0c0c2ece5f410d87d0113b902f7.png

下一篇我们来使用tags对cucumber测试用例进行分组。

这篇关于cucumber并发java_行为驱动:Cucumber + Selenium + Java(二) - 第一个测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190594

相关文章

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添