Selenium系列之--11 selenide 使用

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

posted @ 2021-10-19 11:22  雨 燕  阅读(1028)  评论(0编辑  收藏  举报