写在前面的话
Selenide介绍
Selenide是一个由SeleniumWebDriver驱动的自动化测试框架,具备以下优点:
· 简练的流式API
· 支持Ajax稳定性测试
· 强大的真正页面对象选择器
使用Selenium无需考虑怎样关闭浏览器、处理超时和StaleElement异常、搜索相关的日志信息以及调试测试代码。只需要关心业务逻辑,剩下的交给Selenide完成就好!
Cucumber介绍
Cucumber是一个能够理解用普通语言描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和·Net等多种开发语言。
上手指导
1、 安装jdk并配置相关环境变量
2、 安装maven,并配置相关变量
3、 下载Eclipse启动后下载Cucumber相关插件并创建maven项目Cucumber 插件(可在eclipse 中下载该插件扩展 ) 附上地址 cucumber - http://cucumber.github.com/cucumber-eclipse/update-site ,可在eclipse点击 Help-->Istall Software 点击add并且输入Name(cucumber ) location(http://cucumber.github.com/cucumber-eclipse/update-site),点击ok,接下来安装直到完成即可.
完成以上步骤后,正式开始编写Feature文件
创建Feature文件
1、 进入已创建好的项目,新建如图所示文件夹目录结构为 src/test/resources。
2、 引入所需的pom.xml文件(需要引入较多相关的依赖包,所以需要保持网络畅通)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ictrade</groupId>
<artifactId>Auto_Test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Auto_Test</name>
<url>http://maven.apache.org</url>
<properties>
<!-- Dependency Versions -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dep.spring.version>4.1.6.RELEASE</dep.spring.version>
<dep.mybatis.version>3.2.8</dep.mybatis.version>
<dep.mybatis-spring.version>1.2.3</dep.mybatis-spring.version>
<dep.wink.version>1.4</dep.wink.version>
<dep.jaxb-api.version>2.2.12</dep.jaxb-api.version> <!-- wink 依赖的是 2.2 -->
<dep.jaxb-impl.version>2.2.11</dep.jaxb-impl.version> <!-- wink 依赖的是 2.2.1.1 -->
<dep.mysql-jdbc.version>5.1.37</dep.mysql-jdbc.version>
<dep.slf4j.version>1.7.12</dep.slf4j.version>
<!-- Plugin Versions -->
<findbugsXmlOutput>true</findbugsXmlOutput>
<findbugsXmlWithMessages>true</findbugsXmlWithMessages>
<xmlOutput>true</xmlOutput>
<!-- Project configuration -->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.53.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>3.8</version>
</dependency>
</dependencies>
</project>
3 、进入resources文件夹内,创建文件夹(Folder),并输入文件夹名称
4、 文件夹创建成功后,右键选择已创建的文件夹创建文件(file),文件名称命名为*.feature ,如上图
5、 创建完成后,打开文件,开始编写Feature文件,以QQ空间登录为例。
写法说明
a) Feature:表示要实现的功能说明。
b) Scenario Outline:场景大纲 表示当前步骤要实现的功能
c) Scenario:场景
d) Given : 假设我要怎么做,相当于前置条件
e) And : 和,并且
f) When : 当,做对应操作,相当于操作步骤
g) Then : 那么,则,表示预期结果
h) Examples: 场景大纲,可输入的值
i) 参数说明”<用户名>” “<密码>” 表示此值需要参数化,可在下面的Examples中列举,可以参考上面截图
注:有Outline时必须有Examples,编写时请将输入法切换至英文模式,否则可能会出现一些问题,导致无法检查通过。
6、 写完Feature文件后,可先右键选择Pretty Format执行检查,检查是否有语法错误。
7、 检查确认通过后,可选择Run As,Cucumber Feature来进行执行
8、 执行完成后,控制台将显示Feature文件对应代码桩
9 、 创建Java文件,文件名称尽量与Feature文件一致,并且后面+def(其实也没有什么规范,只是好识别而已),
,
创建Steps文件(主要生成报告)附上TestCaseSteps 文件内容
package QQ;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources/kc", plugin = { "pretty", "html:target/cucumber-html-report",
"json:target/operation.json" })
public class TestCaseSteps {
}
10 、将前面生成的代码桩文件拷贝至已创建的Java文件中,(仅供参考,我这边是完成后的。)
11 、至此从新建到完成编写代码已完成,下面再附上Selenide的一些方法介绍
Selenide使用
Selenide是封装了Selenium的一些方法,所以写法与Selenium类似。由于Selenide是基于webdriver的一个工具,所以操作对应网页或功能需要依赖网页中的id,name,
class或界面文字等,下面逐一介绍获取节点方式。
1、 By.id(“”),写法为Selenide.$(By.id("bottom_qlogin"))获取该节点的方式在浏览器选中要寻找的输入框或者目标功能区(推荐google或火狐)右键
选择检查或审查元素,找到输入框内对应的ID
2、 By.name(“”),写法为Selenide.$(By.name("password"))获取该节点的方式在浏览器选中要寻找的输入框或者目标功能区(推荐google或火狐)右键
选择检查或审查元素,找到输入框内对应的name。
3、 By.cssSelector(“”),写法为Selenide.$(By.cssSelector(".login"))获取该节点的方式在浏览器选中要寻找的输入框或者目标功能区(推荐google或火狐)右键
选择检查或审查元素,找到输入框内对应的class ,需要注意的是,CSSSelector中class的写法需要在前面加上“ .”
4、 By.linkText(),写法为Selenide.$(By.linkText("cesdedsdf"));此方法主要功能为寻找界面上对应元素。
5、Configuration.browser = "chrome"; 此方法为设置打开的浏览器,需要默认安装的chrome,并且目前发现如果版本超过51可能无法启动。
6、Selenide.open("http://i.qq.com/"); 打开指定网址
7、Selenide.switchTo().frame("login_frame"); 切换到指定iframe
8、Selenide.sleep(5000); 休眠,等待时间,单位为毫秒
5、 Selenide常用的一些包
a) import static com.codeborne.selenide.Condition.text,引入此包后,可使用方法shouldHave(text(""));
b) importorg.junit.Assert,引入此包后可使用方法Assert.assertEquals("",Selenide.title());
c) 以上两个包主要实现的功能为判断或断言
6、 .click();方法,主要是实现某些功能或按钮的点击
7、 sendKeys(arg2);用来传值。
8、 .hover();模拟鼠标滑过某个元素.