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的力量! 专注于业务逻辑。

让世界更美好

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

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

提供工作软件。

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

selenide

selenide_使用Selenide进行有效的UI测试相关推荐

  1. 使用Selenide进行有效的UI测试

    等待奇迹 圣诞节是奇迹的时刻. 在新的一年的前夕,我们都为下一年制定了计划. 我们希望所有问题都将在最后一年消失,在来年出现奇迹. 每个Java开发人员都梦想着创造一个奇迹,使他成为世界上最有效的Ja ...

  2. 一起谈.NET技术,VS2010测试功能之旅:编码的UI测试(3)-操作对象的识别原理...

    回顾  在之前的两章分别介绍了一个简单的示例, 操作动作的录制原理,通过修改UIMap.UItest文件控制操作动作代码的生成.想必大家对编码的UI测试操作动作的录制应该有一定了解了,在UI操作中,操 ...

  3. Sencha应用程序的UI测试

    原文:http://www.sencha.com/blog/ui-testing-a-sencha-app/ 几个月前,笔者写了一篇题为<自动化单元测试>的文章,内容涉及开发人员如何为业务 ...

  4. VS2010测试功能之旅:编码的UI测试(6)- 提高UI测试稳定性的8个方法(下)

    VS2010测试功能之旅 --编码的UI测试系列之六:提高UI测试稳定性的8个方法(下) RealZhao,2011年5月11日 回顾 在之前,我们介绍了提高UI测试稳定性的8个方法的前6个,接下来介 ...

  5. 使用 Android Studio 进行测试 (二) UI 测试

    目录 单元测试 UI 测试 原文链接: Unit and UI Testing in Android Studio 2. UI 测试 配置 编码 测试 2.1 配置 2.1.1 IDE 配置 Buil ...

  6. 使用编码的 UI 测试来测试 Windows 应用商店应用

    自从Win8应运而生以来,Windows应用商店便立马成为开发者展示的舞台,而这短短的几年里应用的数量就可数以万计,这也不可避免地出现了良莠不齐的局面.我们都知道Visual Studio是目前最流行 ...

  7. 利用 Rize 来进行 UI 测试或 E2E 测试

    之前我曾经在<Rize - 一个可以让你简单.优雅地使用 puppeteer 的 Node.js 库>一文简单介绍过 Rize 这个库.当时仅仅是介绍这个库本身,关于如何使用,我没有给太多 ...

  8. 一起谈.NET技术,VS2010测试功能之旅:编码的UI测试(2)-操作动作的录制原理(下)...

    回顾 在本章上部分介绍了操作动作的录制原理,描述了操作动作是如何录制,UIMap.uitest和UIMap.Designer.cs的代码如何生成,以及他们的结构.在这个部分,将着重说明如何通过修改UI ...

  9. 网易自动化UI测试解决方案Airtest Project亮相GDC

    GDC开幕第一天,Google在GDC发布了一款由网易研发的游戏UI自动化测试方案:Airtest Project.21日,这项研发成果也展开了专门的讲座活动,向全球开发者公开演示. Airtest ...

最新文章

  1. div固定大小文字溢出自动缩小_CSS样式更改——框模型、定位、浮动、溢出
  2. 建模揭秘----构建用户模型
  3. Go包导入与Java的差别
  4. python 相对路径
  5. 干货 | 神经网络与深度学习精选文章汇总
  6. StringBuilder的实现与技巧
  7. Yii框架里用grid.CGridView调用pager扩展不显示最后一页按钮的解决
  8. PAT乙类1014 福尔摩斯的约会 (20 分)
  9. python开放源代码的版本控制系统_几款版本控制工具SVN、GIT、CVS及Mercurial的比较...
  10. 凌波微步-python小游戏源码下载
  11. java8新特性:对map集合排序
  12. 【CQOI2007】【BZOJ1257】余数之和
  13. 黑马vue实战项目-(一)项目初始化登录功能开发
  14. 可替代Visio的免费流程图软件draw.io(含下载地址)
  15. CodeBlocks新手安装以及汉化(20,03版本)
  16. JVM语言Xtend优缺点速览
  17. FINN(二)CNN,BNN及其硬件实现的背景知识
  18. SOA面向服务体系的架构
  19. Facade (外观)模式
  20. 编程修养-C语言篇(下)(转)

热门文章

  1. P4074-[WC2013]糖果公园【树上带修莫队】
  2. CF735D-Taxes【数学,数论】
  3. SpringBoot使用日志
  4. mybatis源码阅读(七) ---ResultSetHandler了解一下
  5. Spring Boot 单元测试详解+实战教程
  6. Spring开启方法异步执行
  7. C#使用集合组织相关数据
  8. winform实现简单的计算器V1版本
  9. MySQL中有外键时数据表的删除方法
  10. mysql id生成器自定义_MybatisPlus使用自定义Id生成器数据自动填充