1. 什么是 Selenide
Selenide = UI Testing Framework powered by Selenium WebDriver, Selenide 基于Java语言,是对 selenium 的一个封装,用于编写简洁 concise 而稳定 stable 的UI测试。 官网 Github
优点:
- 内置隐式等待
- 用例运行完后自动关闭浏览器
- 代码简单,易读
- 自动对失败用例截图
2. 使用
2.1 准备(首先在pom.xml中加入如下依赖)
<!-- selenide 4.8版本对应selenium-java 3.7.1版本 -->
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>4.8</version>
</dependency>
2.2 使用
2.2.1 常用操作
# selenide默认使用Firefox浏览器,设置成chrome浏览器
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
Configuration.browser = "chrome";
# 设置浏览器运行完不关闭
Configuration.holdBrowserOpen = true;
Configuration.timeout = 6000 ;
Configuration.timeout = 8000 ;
# 修改报告默认生成路径
Configuration.reportsFolder = "target/reports/test"+Configuration.browser;
---------------------------------------------------------------------------------------
# 把webDriver传给selenide (注意:如果使用自己设置的driver,selenide不会自动关闭browser,需要手动关闭!)
WebDriverRunner.setWebDriver(driver);
# 获取当前driver
WebDriverRunner.getWebDriver();
# 获取当前页面url
WebDriverRunner.url()
# 返回当前页面的源HTML代码
WebDriverRunner.source()
---------------------------------------------------------------------------------------
# 打开一个url:
open("https://www.baidu.com/");
# 获取当前页面title
title()
# 刷新当前页面
refresh();
# 清除浏览器cookie
clearBrowserCookies();
# 切换浏览器窗口
switchTo().window(nameOrHandle);
# 执行js
executeJavaScript(String jsCode,Object ... arguments)
2.2.2 元素定位
selenide使用“$”符号定位一个元素(导包:import static com.codeborne.selenide.Selenide.*;)
$(String cssSelector) - $符号默认参数是“CSS”,返回SelenideElement类的对象,SelenideElement继承WebElement,该对象表示页面上CSS选择器找到的第一个元素。
$(By) - 由By类的定位器返回找到的第一个元素。
$(byText(“Sign in”)) - 通过text定位
$(byXpath("//*[text()=‘Sign in’]")) -通过Xpath定位
$(byAttribute(“placeholder”,“房源编号”)) - 通过属性定位
$$("#search-results a").findBy(text(“selenide.org”)) 二级查找
2.2.3 元素操作
操作 | 意义 | 说明 |
---|---|---|
click() | 鼠标点击 | |
doubleClick() | 鼠标双击 | |
contextClick() | 鼠标右击 | |
hover() | 悬停 | |
dragAndDropTo(String) | 鼠标拖动操作 | |
setValue(String) / val(String) | 文本框赋值 | |
pressEnter() | 输入 回车键 | |
pressEscape() | 输入 Escape 键 | |
pressTab() | 输入 Tab 键 | |
selectRadio(String value) | 点击单选按钮 | |
selectOption(String) | 下拉框选择 | |
append(String) | ||
download() | 下载文件的操作(默认只能下载标签的元素,若想下载其他标签里面的元素则需另外设置) | |
uploadFile(file) | 上传文件的操作(uploadFile的参数为File类型) |
获取元素状态和属性值的方法
操作 | 意义 | 说明 |
---|---|---|
getValue() | val() | |
data() | ||
attr(String) | ||
text() | 返回“页面上的可见文本” | |
innerText() | 返回“DOM中元素的文本” | |
getSelectedOption() | ||
getSelectedText() | ||
getSelectedValue() | ||
isDisplayed() | 如果元素被隐藏(不可见)或者DOM中不存在元素,则返回false; 否则 - 是的 | |
exists() | 如果DOM中存在元素,返回true;否则返回false |
实际例子:
$(byText(“Sign in”)).click() - 点击
$(byName(“password”)).setValue(“qwerty”) - 文本输入
$(byName(“password”)).setValue(“qwerty”).pressEnter() -文本输入后敲回车
$(By.xpath(element)).exists() - 判断元素是否存在
executeJavaScript(String jsCode,Object … arguments) 执行js代码
2.2.4 元素集合定位和操作
通过 “$$”定位一组元素,如下:
$$("#search-results a") 返回ElementsCollection类型的元素集合
对元素集合的操作
size();
isEmpty();
get(int); //根据index获取元素集合中的某一个元素
getTexts();//返回可见元素集合文本的数组,例如对于元素:<li>a</li><li hidden>b</li><li>c</li>将返回数组["a", "", "c"]
2.2.5 操作alert
confirm(); //确定alert
confirm("exceptionText"); //判断alert的文字是否是期望的那个,如果是,接收alert
dismiss(); //取消alert
2.2.6 断言
selenide通过should来进行断言,相当于Assert。
例子如下:
$(“input”).should(exist) - 验证元素应该存在
$(“input”).shouldBe(visible) - 验证元素应该可见
$(“input”).shouldHave(exactText(“Some text”)) - 验证元素的text等于Some text
$(“input”).shouldHave(value(“John”)) - 验证元素的value属性等于John“”
$(“#input”).shouldHave(id(“myForm”)) - 验证元素的id属性等于“myForm”
$("#btn-Search").shouldHave(text(“搜索”)) - 验证元素是否包含“搜索”文本
$("#btn-Search").shouldNotHave(text(“搜索”)) - 验证元素不包含“搜索”文本
$("#btn-Search").shouldNot(exist) - 不存在某个元素
断言相当于显示等待,等待的状态(visible,enabled,text(“some text”))是否满足,直到超时达到的值(默认设置为4000毫秒)。断言返回的也是元素对象本身,所以可以继续操作该元素。,例如:$("#submit").shouldBe(enabled).click();
还可以自行明确设置超时:
waitUntil(条件,毫秒)
waitWhile(条件,毫秒)
3. 源码
3.1 学习Selenide
学习 Selenide 最快捷的方法是打开IDE 开发环境,输入: $(selector). Selenide javadoc。
3.2 常用到的 Selenide 类:
-
com.codeborne.selenide.Selenide 核心类。主要方法有:open,$和$$
-
com.codeborne.selenide.SelenideElement 本类描述页面上找到的元素。类的对象可以通过 $ 命令来获取。有用的方法有:
-
com.codeborne.selenide.Condition Condition 主要用在 should/ shouldNot/ waitUntil/ waitWhile 等这些结构中。
-
com.codeborne.selenide.Selectors 本类相当于是原始选择器的扩赞,包含通过文本或属性来定位元素的 By选择器
-
com.codeborne.selenide.ElementsCollection 本类描述页面上找到的元素集合。通常可以通过 $$ 方法获取 ElementsCollection类的对象。有用的方法有:
-
com.codeborne.selenide.CollectionCondition Collection conditions 主要用在 shouldBe/shouldHave 等这些结构中。
-
com.codeborne.selenide.WebDriverRunner 定义了一些浏览器管理方法:url() - 返回当前URL;source() - 返回当前页面的源HTML代码
-
com.codeborne.selenide.Configuration 包含测试执行时不同的配置选项。例如: timeout - collectionsTimeout - browser - baseUrl - reportsFolder
注意,这些配置项也可以作为系统属性传递,例如,当配置测试在CI服务器上执行时e.g. -Dselenide.baseUrl=http://staging-server.com/start