selenide_使用Selenide进行有效的UI测试

selenide

等待奇迹

圣诞节是奇迹的时刻。 在新的一年的前夕,我们都会制定下一个计划。 我们希望所有问题都将在最后一年消失,在来年出现奇迹。

每个Java开发人员都梦想着奇迹,使他成为世界上最有效的Java开发人员。

我想向你展示这样的奇迹。

这就是所谓的自动化测试

tests,测试?

是。 借助micro / pico / nano服务,您不会成为真正的主人。 多亏纪律,您才能成为真正的主人。 纪律声称,开发人员仅在编写和运行代码和测试时才报告作业完成

但是,测试不是很无聊吗?

哦,不,相信我! 对于最聪明的人来说,编写快速稳定的自动化测试是一个巨大的挑战。 这可能非常有趣。 您只需要使用正确的工具。

编写UI测试的正确工具是:

Selenium化物

Selenide是一个开放源代码库,用于编写简洁而稳定的UI测试。

Selenide是软件开发人员的理想选择,因为它的学习曲线非常低。 因此,您不必费心浏览器详细信息,所有这些典型的ajax和时间问题,而这些时间和问题都占用了QA自动化工程师的大部分时间。

让我们看一个最简单的Selenide测试:

public class GoogleTest {@Testpublic void user_can_search_everything_in_google() {open("http://google.com/ncr");$(By.name("q")).val("selenide").pressEnter();$$("#ires .g").shouldHave(size(10));$("#ires .g").shouldBe(visible).shouldHave(text("Selenide: concise UI tests in Java"),text("selenide.org"));}
}

让我们仔细看看这里发生的情况。

  • 您只需open(url)一个命令即可open(url) 浏览器 open(url)
  • 可以在命令$的页面上找到一个元素
    您可以按名称,ID,CSS选择器,属性,xpath甚至按文本查找元素。
  • 您可以操纵该元素 :使用val()输入一些文本,然后使用(surprise-surprise!) pressEnter()按Enter。
  • 检查结果 :用$$找到所有找到的结果(它返回所有匹配元素的集合)。 您检查集合的大小和内容。

这个测试不容易阅读吗? 这个测试不容易编写吗?

我相信是。

深入细节

Ajax /时序问题

如今,Web应用程序是动态的。 每个应用程序都可以随时动态呈现/更改。 这给自动化测试带来了很多问题。 今天测试为绿色的测试随时可能突然变成红色,这是因为浏览器执行某些JavaScript的时间比平常更长。

这真是ajjaxx的痛苦

令人难以置信的是,Selenide以非常简单的方式解决了大多数这些问题。

简而言之, 如果需要 ,每种Selenide方法都会等待一点。 人们称其为“智能等待”。

当你写:

$("#menu").shouldHave(text("Hello"));

Selenide检查元素是否存在并包含文本“ Hello”。

如果还没有,Selenide假定该元素可能很快就会动态更新,并稍等片刻,直到它发生。 默认超时为4秒,通常对于大多数Web应用程序来说足够了。 当然,它是可配置的。

丰富的匹配器

您可以使用Selenide检查几乎所有内容。 使用上面提到的“智能等待”机制。

例如,您可以检查元素是否存在。 如果还没有,Selenide将等待最多 4秒钟。

$(".loading_progress").shouldBe(visible);

您甚至可以检查该元素存在。 如果仍然存在,Selenide将等待4秒钟,直到消失。

$(By.name("gender")).should(disappear);

而且,您可以使用流利的API和链方法来简化测试:

$("#menu").shouldHave(text("Hello"), text("John!")).shouldBe(enabled, selected);

馆藏

Selenide允许您使用集合,因此只需一行代码即可检查许多元素。

例如,您可以检查页面上是否确实有N个元素:

$$(".error").shouldHave(size(3));

您可以找到集合的子集:

$$("#employees tbody tr").filter(visible).shouldHave(size(4));

您可以检查元素的文本。 在大多数情况下,检查整个表或表行就足够了:

$$("#employees tbody tr").shouldHave(texts("John Belushi","Bruce Willis","John Malkovich")
);

上传/下载文件

使用Selenide上传文件非常简单:

$("#cv").uploadFile(new File("cv.doc"));

您甚至可以一次上传多个文件:

$("#cv").uploadFile(new File("cv1.doc"),new File("cv2.doc"),new File("cv3.doc")
);

下载文件非常简单:

File pdf = $(".btn#cv").download();

测试“高度动态”的Web应用程序

一些Web框架(例如GWT)生成HTML绝对不可读。 元素没有恒定的ID或名称。

这是xpathh中的真正痛苦

Selenide建议通过按文本搜索元素来解决此问题。

import static com.codeborne.selenide.Selectors.*;$(byText("Hello, Devoxx!"))     // find by the whole text.shouldBe(visible);$(withText("oxx"))              // find by substring.shouldHave(text("Hello, Devoxx!"));

通过文本搜索根本不是一个坏主意。 实际上,我喜欢它,因为它模拟了真实用户的行为。 实际用户无法通过ID或XPATH找到按钮,而是通过文本(或者颜色)找到按钮。

另一套有用的Selenide方法使您可以在父母和孩子之间导航。

$("td").parent()
$("td").closest("tr")
$(".btn").closest(".modal")
$("div").find(By.name("q"))

例如,您可以按文本找到表格单元格,然后按其最接近的tr后裔找到表格单元格,并在此表格行内找到“保存”按钮:

$("table#employees").find(byText("Joshua")).closest("tr.employee").find(byValue("Save")).click();

…和许多其他功能

Selenide具有更多功能,例如:

$("div").scrollTo();
$("div").innerText();
$("div").innerHtml();
$("div").exists();
$("select").isImage();
$("select").getSelectedText();
$("select").getSelectedValue();
$("div").doubleClick();
$("div").contextClick();
$("div").hover();
$("div").dragAndDrop()
zoom(2.5);
...

但好消息是您不需要记住所有这些东西。 只需放入$,放入点,然后从IDE建议的可用选项中进行选择。

使用IDE的力量! 专注于业务逻辑。

ide-just-start-typing

让世界更美好

我相信,当所有开发人员都开始为其代码编写自动化测试时,World会变得更好。 当开发人员在17:00起床去看孩子时,不用担心他们在最后的改动后会破坏某些东西。

让我们通过编写自动化测试来改善世界!

提供工作软件。

翻译自: https://www.javacodegeeks.com/2015/12/effective-ui-tests-selenide.html

selenide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10无法更改计算机设置,Win10“无法保存ip设置,请检查一个或多个设置并重试”的解决方法...

近期有网友想要在Win10系统中手动设置本机IP地址,但是填写完毕之后却提示了“无法保存ip设置,请检查一个或多个设置并重试”,那么遇到这个问题,我们要如何解决呢?下面装机之家分享一下Win10“无法保存ip设置,请检查一个或多个设置…

24段魔尺拼图指南_拼图项目动手指南

24段魔尺拼图指南Jigsaw项目将把模块化引入Java平台,根据原始计划,它将在12月10日完成功能。 所以我们在这里,但拼图在哪里? 在过去的六个月中肯定发生了很多事情: 原型问世 ,内部API的迫在眉睫的删除引起…

sql 解析 java_将Java 8流解析为SQL

sql 解析 java当Java 8发行并且人们开始流式处理各种东西时,不久之后他们就开始想象如果可以以相同的方式使用数据库将有多大的潜力。 本质上,关系数据库由以表状结构组织的巨大数据块组成。 这些结构非常适合进行过滤和映射操作,如SQL语言的…

杭州电子科技大学保研计算机,杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则...

杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则信息,是考研之前需要获取相应的考研信息,比如考试大纲、招考专业、招考目录等等基本信息,这些内容是进行考研前期工作的必要准备。考生可以从各院校的研招网进行查询&#xff0…

返回路径平面上的间隙_裁切机的上刀下刀如何调整?

每天都在使用裁切机时,由于各种因素往往会出现上刀、下刀现象(也称凸刀、凹刀现象),给后面的套准带来困难。在此小编对上刀、下刀现象的产生原因做一分析与总结。01千斤压力不够(1)机械压力弹簧弹力不够。此时必须增大压力,如果增大到最大位置…

pcb板材的tg是什么_做到这6点,PCB过回焊炉不会出现板弯及板翘!

【维文信PCBworld】在PCB板子过回焊炉容易发生板弯及板翘,大家都知道,那么如何防止PCB板子过回焊炉发生板弯及板翘,下面就为大家阐述下:1.降低温度对PCB板子应力的影响既然「温度」是板子应力的主要来源,所以只要降低回…

java-ee-api_刷新器-Java EE 7概览

java-ee-api随着红帽JBoss企业应用平台7(EAP 7)的迫在眉睫,甚至WebLogic Server刚刚获得Java EE 7认证,我认为现在应该是时候对Java Enterprise Edition 7进行一些更新了。功能,并指向更多资源。 Java EE 7 –开发人员…

层 数据仓库_小尝试:基于指标体系的数据仓库搭建和数据可视化

关于作者:小姬,某知名互联网公司产品专家,对数据采集、生产、加工有所了解,期望多和大家交流数据知识,以数据作为提出好问题的基础,挖掘商业价值。0x00 前言我将整理文章分享数据工作中的经验,因…

计算机中级职称报考入口,2020年9月计算机职称考试报名流程(附入口)

2020年9月计算机等级报名公告正在陆续公布,计算机等级考试网上怎么报名?小编为大家整理计算机等级报名流程如下:2020年9月计算机等级报名流程一、注册通行证考生登入报名网页后,点击“用户注册”按钮,根据网页提示&…

简单工厂抽象工厂工厂方法_让工厂美丽

简单工厂抽象工厂工厂方法每个名副其实的Java程序员都知道Factory Pattern 。 这是一种便捷,标准化的方法,它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合。 但是,在使用大型系统时,该模式确实会向系统添加很多样板代码…

内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0

内蒙古大学计算机组成原理期末练习0 (4页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分第 1 页 共 4 页 《《计算机组成原理计算机组成原理》》期末练习期末练习 班级 专业 姓名 学号 编号 …

dev的编辑器不支持getchar吗_“两头婚兴起”:你支持不娶不嫁,孩子随父姓也随母姓吗?...

何为两头婚?简单来说就是男不娶,女不嫁,没有彩礼也没有嫁妆的说法。男女俩人结婚之后没有谁到谁家里之说,两夫妻过自己的小日子,与各自的原生家庭保持一定的联系。婚后生育两个孩子,一个随父姓,…

全国计算机证件照要露耳朵吗,结婚证照片要露耳朵么 结婚登记照露一只耳朵行吗...

结婚证件照,这是可以在在民政局里面照的,也是可以在外面的影楼照的,在外面影楼照的话,照出来会比较好看,就是价格有点贵。结婚证上面的照片是证件照,所以是有一定的要求的。露一只耳朵行不行呢?…

findfirst_当心findFirst()和findAny()

findfirst过滤Java 8 Stream ,通常使用findFirst()或findAny()来获取在过滤器中幸存的元素。 但这可能并不能真正实现您的意思,并且可能会出现一些细微的错误。 那么 从我们的Javadoc( 此处和此处 )可以看出,这两种方…

java流式传输对象_使用Java 8在地图上流式传输

java流式传输对象在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将使保持流的具体性和可读性变得更加容易。 希望这将允许您继续流式传…

oracle11g支持xp吗_拔掉U盘前一定需要安全弹出吗?

相信每一个使用过U盘的人,都经历过不安全弹出USB设备就直接拔掉,然后被电脑无情提示没有正确弹出USB设备的状况。拔掉U盘前点击安全弹出,已经成了一种默认的操作。那么,问题来了,拔掉U盘前真的需要安全弹出吗&#xff…

java中使用kotlin_在Kotlin中使用libGDX

java中使用kotlin最近,我一直在阅读有关不同语言的信息,以及它们可以为已经拥挤的软件开发人员带来什么,并且一种语言对我来说很突出:Kotlin。 ( https://kotlinlang.org/ ) 这是一种相对较新的语言&#…

同时防服务器维修,加强服务器日常运维,避免宕机灾难发生

原标题:加强服务器日常运维,避免宕机灾难发生服务器作为我们日常网络的支撑,可以说是24小时的全天候运转。在这种无休止的“加班”的状态下,服务器必然容易出问题,一旦发生服务器宕机就会造成整个网络的瘫痪&#xff0…

basemap安装_【我是解决安装问题系列_1】Mac python basemap安装

「2020/3/21更新」 附basemap网盘下载地址⏬Python需要跳过的安装的坑太太太太多了!!!!!最近看《利用python进行数据分析》这本书,到可视化的部分,看着最后的例子地图挺酷炫的,跟着敲代码的过程中,发现有时候不是你不会写&#xf…

nfs服务器远程访问,NFS远程共享存储

原标题:NFS远程共享存储构建储NFS远程共享存因为NFS有很多功能,不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息,这样就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。那RPC和NFS之间又是如何之间相互通…