iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Selenide 简介与用法
  • 315
分享到

Java Selenide 简介与用法

2024-04-02 19:04:59 315人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Selenide 介绍什么是selenium官方快速入门元素定位元素操作浏览器操作断言常用配置Selenide 和 WEBdriver 对比Selenide 介绍 Seleni

Selenide 介绍

Selenide GitHub

Selenide 官方文档

什么是selenium

一套软件工具,用来支持不同的自动化测试方法

开源软件:可以根据需要来增加重构工具的某些功能

跨平台:linuxwindows Mac

核心功能就是可以在多个浏览器上进行自动化测试

支持多种编程语言

目前已经被Google , 百度, 腾讯等公司广泛使用

能够实现类似商业工具的大部分功能,并且还实现了商业工具不能支持的功能

建议大家整体学习整套工具, 将来好选择适合自己测试目的的测试工具。

Selenide 是对 Selenium 的一个封装,其语法更加简单。其优点如下:

  • 代码简单、易读
  • 内置隐式等待(无需考虑元素的等待时间)
  • 用例运行完后自动关闭浏览器
  • 自动对失败用例截图
  • 由于是对 Selenium 的封装,所以可以和 Selenium 一起使用
  • ...

Selenide 的团队自诩它是一个测试工具而不是一个测试框架,因为它只是 Webdriver 的一个封装(目前只有 Java 版本),其底层的实现还是 Webdriver。所以他们认为并没有伟大到开发了一个测试框架,而仅仅是个测试工具(很谦虚的说)。

所以一切 Webdriver 能做的,Selenide 都能做。Webdriver 做不到的,也别指望 Selenide 能做到。

就像团队人员说的“Selenide is just a wrapper”,如果你不想使用 Selenide 了,或者 Selenide 满足不了你的需要,你大可以通过以下方式获取一个 Webdriver,直接操作 Webdriver 的 api

driver = WebDriverRunner.getWebDriver();

所以如果有小伙伴担心这个新兴的工具没有强大到满足你的项目需求怎么办?大可以放心,最坏的情况也就是直接用 Webdriver 去做就好了。

官方快速入门

Maven 依赖:

不同版本的 Selenide 所兼容的 selenium 版本不同(如 Selenide 5 对应 selenium 4)。

不同版本的 Selenide 所默认支持的浏览器版本范围也不同。

 <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <version>5.25.1</version>
        </dependency>

测试代码:

@Test
public void testBaiduSearch() {
   open("https://www.baidu.com");
   $(By.name("username")).setValue("johny");
   $("#submit").click();
   $(".success-message").shouldHave(text("Hello, Johny!"));
}

前面说了 Selenide 致力于封装更简单好用的 API,所以开启和关闭浏览器这些东西它都帮你做好了。

Selenide 默认使用 Firefox 浏览器,如果你要使用其他浏览器可以手动设置:

Configuration.browser="chrome";
// 如果默认chrome版本不兼容,可以在环境变量中设置 chrome 浏览器的路径
System.setProperty("webdriver.chrome.driver", Constant.getChromeDriverPath());
// 手动设置 chrome 浏览器的路径
System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");

元素定位

Selenide 使用$符号定位一个元素,使用 idea 时只要输入“$(by”就可以通过代码提示来找到我们想要的方法。如下图:

// $ 符号默认参数是 CSS 定位表达式,返回 SelenideElement 类的对象,SelenideElement 继承 WebElement,该对象表示页面上 CSS 选择器找到的第一个元素
$(String cssSelector)

// 输出的元素: "<option value=livemail.ru checked=true selected:true>@livemail.ru</option>"
System.out.println($("#customerContainer"));

// 通过元素 id 定位
$("#id")
$(byId("id"))

// 通过 class 定位
$(".className")
$(byClassName(".className"))

// 通过 name 定位
$(byName("name"))

// 通过 text 定位。如果使用 selenium 的话只能用小 path 的写法,如 driver.findElementByXpath(“//*[text()=‘Sign in']”)
$(byText("Sign in"))

// 通过Xpath定位
$(byXpath("//*[text()='Sign in']"))

// 通过元素的属性定位
$(byAttribute("placeholder", "房源编号"))

// $$ 用于定位一组元素(返回 ElementsCollection 类型的元素集合),且可以再在集合中继续定位元素
$$("#search-results a").findBy(text("selenide.org"))

元素操作

元素操作:

click()  // 点击
doubleClick()  // 双击
contextClick()
hover()
setValue(String)/val(String)  // 文本输入
pressEnter()  // 回车键
pressEscape()
pressTab()
selectRadio(String value)
selectOption(String)
append(String)
dragAndDropTo(String)

获取元素状态和属性值:

getValue()/val()
data()
attr(String)
text()  // 返回页面上的可见文本
innerText()  // 返回 DOM 中元素的文本
getSelectedOption()
getSelectedText()
getSelectedValue()
isDisplayed()  // 如果元素被隐藏(不可见)或者 DOM 中不存在元素,则返回 false
exists()  // 如果 DOM 中存在元素,则返回 true

浏览器操作

// 打开浏览器(如果尚未打开)并加载URL
open(String URL);

// 切换浏览器窗口
switchTo().window(1);

// 刷新
refresh();

// 线程等待
sleep();

// 操作 alert
confirm();  // 确定 alert
confirm("exceptionText");  // 判断alert的文字是否是期望的那个,如果是则接收 alert
dismiss();  // 取消 alert

断言

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("搜索"));  // 验证元素不包含“搜索”文本

$("#customerContainer").should(matchText("profile"));  // 使用正则表达式:是否包含“profile”文本

还可以使用断言来做显示等待,等待的状态(visible、enabled、text(“some text”))是否满足,直到超时达到的值(默认设置为 4000 毫秒),例如:

$("#submit").shouldBe(enabled).click();

还可以明确设置超时:

waitUntil(条件, 毫秒)
waitWhile(条件, 毫秒)

常用配置

// 把 webDriver 传给 selenide
setWebDriver(driver);

// 获取当前 driver
WebDriverRunner.getWebDriver();

// 设置浏览器运行完不关闭
Configuration.holdBrowserOpen = true;

// 修改报告默认生成路径
Configuration.reportsFolder = "target/reports/test"+Configuration.browser;

// 设置远程服务器(如selenium Grid Hub)
Configuration.remote = "Http://xxxxxxx";

// selenide 默认使用 Firefox 浏览器,可以手动设置使用其他浏览器
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
Configuration.browser = "chrome";

// selenide 自动对于失败用例进行截图,默认保存在 build/report 里面

Selenide 和 Webdriver 对比

创建 webdriver 的方式:

// webdriver
DesiredCapabilities desiredCapabilities = DesiredCapabilities.htmlUnit();
desiredCapabilities.setCapability(HtmlUnitDriver.INVALIDSELECTIONERROR, true);
desiredCapabilities.setCapability(HtmlUnitDriver.INVALIDXPATHERROR, false);
desiredCapabilities.setjavascriptEnabled(true);
WebDriver driver = new HtmlUnitDriver(desiredCapabilities);

// selenide
open("/my-application/login");

Selenide 直接在open 这个 API 里就启动浏览器了,当测试结束时就会关闭浏览器。

查询页面元素:

// webdriver
WebElement customer = driver.findElement(By.id("customerContainer"));

// selenide
WebElement customer = $(By.id("customerContainer"));

这方面倒没有什么特别简化的,但是 selenide 有其他更灵活的方式搜寻控件,例如 byText、byValue 等等,这些在 webdriver 中除非用 xpath,否则是做不到的。


// selenide
WebElement customer = $(byText("Customer profile"));
WebElement temp = $(byValue("不使用")).click();
WebElement temp1 = $(byAttribute("data-name",“test name”)).click();

再看看下面一个,如果返回多个元素,取其中一个:

// webdriver
driver.findElements(By.tagName("li")).get(5);

// selenide
$("li", 5);  // 取一个元素:取所有标签为li的元素中的第5个
$$("#multirowTable tr").filterBy(text("Norris"));  // 取一个集合:取特定的集合后再去搜寻text为期望值的元素

断言控件:

// webdriver
assertEquals("Customer profile", driver.findElement(By.id("customerContainer")).getText());

// selenide
$("#customerContainer").shouldHave(text("Customer profile"));

Selenide 提供一系列 should 标签帮我们做断言的工作,而且有一批text()的这种选择器来帮助我们断言各种类型。上面的例子就是断言控件是否有期望的 text 。

Selenide 专门有一个 condition 包,里面有各种各样的 condition,这些 condition 就是 should 标签的参数。上面的例子 text 就是一个 condition,其他的还有 id、value、attribute、readonly 等等。

等待控件:

有些时候为了增加稳定性,我们需要增加等待一个控件出现的机制。因为控件可能不是立刻出现的,或者说等待一个控件的某个属性变成一个特定值。

// webdriver
FluentWait<By> fluentWait = new FluentWait<By>(By.tagName("TEXTAREA"));
fluentWait.pollingEvery(100, TimeUnit.MILLISECONDS);
fluentWait.withTimeout(1000, TimeUnit.MILLISECONDS);
fluentWait.until(new Predicate<By>() {
    public boolean apply(By by) {
        try {
            return browser.findElement(by).isDisplayed();
        } catch (NoSuchElementException ex) {
            return false;
        }
    }
});
assertEquals("John", browser.findElement(By.tagName("TEXTAREA")).getAttribute("value"));

// selenide
$("TEXTAREA").shouldHave(value("John"));

可以看到 Selenide 一个 should 的 API 搞定了。它默认 4s 超时,4s 内会循环 check 控件的 value 是否变成了期望值。同样的还有 text、attribute 等选择器。

正则表达式:

// webdriver
WebElement element = driver.findElement(By.id("customerContainer"));
assertTrue(Pattern.compile(".*profile.*", DOTALL).matcher(element.getText()).matches());

// selenide
$("#customerContainer").should(matchText("profile"));

关于 alert :

// webdriver
try {
     Alert alert = checkAlertMessage(expectedConfirmationText);
     alert.accept();
   } catch (UnsupportedOperationException alertIsNotSupportedInHtmlUnit) {
     return;
   }
   Thread.sleep(200); // sometimes it will fail

// selenide
confirm("Are you sure to delete your profile?");
// 或者
dismiss("Are you sure to delete your profile?");

到此这篇关于Java Selenide 介绍与使用的文章就介绍到这了,更多相关Java Selenide 使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Selenide 简介与用法

本文链接: https://www.lsjlt.com/news/163190.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Selenide 简介与用法
    目录Selenide 介绍什么是selenium官方快速入门元素定位元素操作浏览器操作断言常用配置Selenide 和 Webdriver 对比Selenide 介绍 Seleni...
    99+
    2024-04-02
  • GoLangsync.Pool简介与用法
    目录使用场景使用方法声明对象池Get & Put性能测试使用场景 一句话总结:保存和复用临时对象,减少内存分配,降低GC压力 sync.Pool是可伸缩的,也是并发安全的,其...
    99+
    2023-01-02
    GoLang sync.Pool GoLang sync.Pool底层原理
  • Java中StringTokenizer的用法简介汇总
    目录StringTokenizer的用法StringTokenizer 构造方法:StringTokenizer 常用方法:补充:下面在介绍下StringTokenizer的使用下文...
    99+
    2024-04-02
  • java外部类与内部类简介
     一、内部类 内部类就是将一个类A定义在类B里边,里边的那个类A称为内部类,外边的类B称为外部类 成员内部类定义格式: class 外部类{ class 内部类{ } } ...
    99+
    2024-04-02
  • Java Jwt库的简介及使用方法
    这期内容当中小编将会给大家带来有关Java Jwt库的简介及使用方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JWT介绍JWT概念JWT , 全写JSON Web Token, 是开放的行业标准RFC...
    99+
    2023-06-25
  • java agent简介
    1、什么是 Java Agent 笼统地来讲,Java Agent 是一个统称,该功能是 Java 虚拟机提供的一整套后门,通过这套后门可以对虚拟机方方面面进行监控与分析,甚至干预虚拟机的运行。 Java Agent 又叫做 Java ...
    99+
    2023-08-31
    jvm java 开发语言
  • PyTorch中torch.utils.data.DataLoader简单介绍与使用方法
    目录一、torch.utils.data.DataLoader 简介二、实例参考链接总结一、torch.utils.data.DataLoader 简介 作用:torch.utils...
    99+
    2024-04-02
  • java LRU算法介绍与用法示例
    本文实例讲述了java LRU算法介绍与用法。分享给大家供大家参考,具体如下:1.前言在用户使用联网的软件的时候,总会从网络上获取数据,当在一段时间内要多次使用同一个数据的时候,用户不可能每次用的时候都去联网进行请求,既浪费时间又浪费网络这...
    99+
    2023-05-31
    java lru 算法
  • Java Spring框架简介与Spring IOC详解
    目录Spring简介和配置1、Spring概述1.1 spring 是什么1.2 Spring发展历程1.3 Spring的优势 (理解)\1. 方便解耦,简化开发\2. AOP 编...
    99+
    2024-04-02
  • PMM--简介与部署
    Percona Monitoring and Management是percona一款开源的用于管理和监控MySQL 和MongoDB性能的开源平台,通过PMM客户端收集到的DB监控数据用第三方软件Grafana画图展示出来,包括两个部分:...
    99+
    2023-01-31
    简介 PMM
  • Mybatis 简介与原理
    什么是MybatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。iBATIS一词来源于“...
    99+
    2023-05-31
    mybatis batis
  • Class.forName()用法简介说明
    Class.forName()是Java反射机制中的一个方法,它的作用是根据类的全限定名(包括包名和类名)动态加载类,返回对应的Cl...
    99+
    2023-09-09
    用法
  • DataSource与数据库连接池简介(JDBC简介)
    目录起源为何放弃DriverManager连接池数据源实现核心架构DataSourceAPI小结应用数据库连接池示例总结DataSource是作为DriverManager的替代品而...
    99+
    2022-11-13
    数据库连接池Data Source JDBC数据库连接池Data Source
  • Golang简介与基本语法的学习
    目录一、什么是Golang?二、安装Golang三、编写Hello World程序四、基本语法4.1 变量4.2 数组和切片4.3 控制流五、并发编程一、什么是Golang? Gol...
    99+
    2023-05-16
    Golang简介 Golang基本语法
  • MongoDB数据库简介与安装方法
    1、简介 MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点(分布式)...
    99+
    2024-04-02
  • java程序代码与文本对比实用工具简介
    1.WinMerge WinMerge是一款运行于Windows系统下的文件比较和合并工具 https://winmerge.org/downloads/?lang=en ...
    99+
    2024-04-02
  • python3的安装与简介
    Python安装(linux)1 安装python3.6可能使用的依赖     #yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...
    99+
    2023-01-31
    简介
  • Python--状态码的简介与获取方法
    一、网页HTTP状态码       HTTP状态码表示HTTP协议所返回的响应状态。       HTTP状态码有5种,所有状态码的第一个数字代表了响应的5种状态之一:(1)消息:1XX;(2)成功:2XX;(3)重定向:3XX;(4)请...
    99+
    2023-01-31
    状态 简介 方法
  • Java - JWT的简单介绍和使用
    Java - JWT的简单介绍和使用 前言一. JWT 基础知识1.1 session 案例测试1.2 JWT 结构1.2.1 Header1.2.2 Payload1.2.3 Signatu...
    99+
    2023-10-27
    java 开发语言 spring boot
  • C#线程池ThreadPool用法简介
    目录一、ThreadPool概述线程池使用起来很简单,但它有一些限制使用线程池线程的操作的情况包括二、方法三、设置和获取线程数方法四、将方法排入队列以便执行:QueueUserWor...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作