从页面对象到页面资源,robotframework如何布局,维护性更好

2024-06-11 15:38

本文主要是介绍从页面对象到页面资源,robotframework如何布局,维护性更好,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在国外网站上找到了一篇文章,把它翻译了出来,英语水平很烂,想喷就喷吧

原文地址:点击打开链接


前提:

我真的不想叫这个为Page Object(页面对象),因为Robot Framework(RF) 它并不是一个面向对象框架.因此本着对Page Ojbect 和 RF 负责任的态度,我叫它Page Resource(页面资源)。你应该听说过页面对象的优点并且已经在自动化测试过程中使用过它了。你是对的。然而怎样将它应用到RF上还有一些需要搞明白的地方。


思想:

最基本的思想是,在网站上的每个页面都创建一个测试对象,这个对象封装了他们各自需要测试的东西。这个页面对象包含所有的与测试系统交互的功能,并且能够扩展第三方类库,例如:Selenium。
通常在一个页面对象所拥有的能力是一些针对于你的应用实现域内的逻辑功能,例如“登录应用”。
然后实际的测试是基于这些高层次的资源,由于缺乏合适的字眼,我将这些高层次的资源叫做Service(一种服务),之所以这么叫他,是因为可以像呼叫企业软件应用服务一样使用它。
可以把它想象为一个层次关系,类似于:



最高层是你的测试,你的测试应该包含一个或者多个service级别资源,但是不应该包含任何page级别的资源.这是因为我们想要从SUT的改变中尽可能的隔离出来
假设,系统上的主页某些部分修改了,你需要改变测试。这可能不费多少功夫。但是我们说的是你有200个测试,你需要到每个测试下面就更新他们,这太蛋疼了,尤其是你没有像开发人员那样特制的重构工具的情况下。由于你隔离抽象出来这些层,你仅仅需要改变一点点服务层资源。

举个例子;高层次的测试好比是登录某个应用程序和检查用户账户的余额
下一层是服务层,服务层包含辅助的关键字和包含和使用页面资源。例如辅助关键字是像用户一样打开web 浏览器和登录你的应用程序。用户不应该被定义而应该通过高层次传递过来。最后是底层的页面资源,页面资源应该调用Selenium2Library,这样隔离了类库的改变对服务和测试的影响,它同时能够实现切换整个类库。假如某一天Selenium3Library 出来了或者某个人写了个更好的类库TonyWebdriver ,页面对象都不知道如何去浏览页面了,此时应该知道如何去重新表述它。


实例:

我将要去做一个简单维基百科的测试,通常我们在底层测试集中会有一些参数,但是为了演示我全部硬编码了。场景如下,我将要去测试的是进入Nissan Motors页面,通过搜索一个 Nissan 240SX,然后点击页面上的一个链接来获得 Nissan Motors (Corporate) 维基百科的页面


我的例子包含三个页面资源
Wikipedia Home Page
Nissan 240SX Page on Wikipedia
The Nissan Motors Page on Wikipedia


有一个高层次服务资源文件,里面只有一个测试,让我们首先来看一下这个测试
*** Settings ***
Test Teardown   Log TestRun
Documentation   A test suite with a single test for try page objects against the
...             Wikipedia Site
Resource        wikipedia-resource.txt


*** Test Cases ***
# This Test Case doesn't use the the Page Resources, it uses a higher level wikipedia resource
Goto Nissan Motors Page Via Searching and Clicking
        Search for Nissan 240SX on Wikipedia
        From Nissan 240SX page goto Nissan Motors Page
        #    [Teardown]  Close Browser


*** Keywords ***
Log TestRun
        ${html_src} =  Log Source
        Run Keyword If Test Failed  Create File   target/robot/myerror.html  ${html_src}
        #    Close Browser


我们定义了一个测试用例,用到了两个来自Wikipedia 服务的关键字


下面Wikipedia 服务
*** Settings ***
Documentation  A resource file containing the application specific keywords
...            that create our own domain specific language. This resource
...            implements a service resource
Library        Selenium2Library
Library        OperatingSystem
Resource       wikipedia-homepage.txt
Resource       wikipedia-nissan240sx-page.txt
Resource       wikipedia-nissan-motors-page.txt


*** Variables ***
${SERVER}               www.wikipedia.org
${BROWSER}              firefox
${DELAY}                0
${HOME PAGE URL}        http://${SERVER}


*** Keywords ***
# Uses Wikipedia and Nissan 240sx Page Resources
Search for Nissan 240SX on Wikipedia
        Open Browser To Wikipedia Home Page
        Search For Nissan 240SX
        Verify Nissan 240SX Page

# Uses Nissan 240sx and Nissan Motors Page Resources
From Nissan 240SX page goto Nissan Motors Page
        Click Link and goto Nissan Motors Page
        Verify Nissan Motors Page


在这个服务中,你可以看到我拥有三个页面资源


 Wikipedia 主页资源如下:
 Library        Selenium2Library
Library        OperatingSystem


*** Keywords ***
Open Browser To Wikipedia Home Page
    Open Browser  ${HOME PAGE URL}  ${BROWSER}
    Maximize Browser Window
    Set Selenium Speed  ${DELAY}
    Title Should Be  Wikipedia


Search For Nissan 240SX
        Input Text  searchInput  Nissan 240sx
        Click Button  go
        
首先我需要调用 “Open Browser To Wikipedia Home Page”.这个关键字是打开浏览器浏览到Wikipedia主页,我没有理由把它放到一个更高层次,但我可以。我喜欢这样是因为它给我一目了然的是现在我在主页上了。
可以查看“Tittle Should Be  Wikipedia”那行,那就告诉我我是在主页, Nissan 240sx 页面资源非常简单
Library        Selenium2Library


*** Keywords ***
Verify Nissan 240SX Page
        Title Should Be  Nissan 240SX - Wikipedia, the free encyclopedia

Click Link and goto Nissan Motors Page
        Click Link  Nissan
        
它包含一个验证关键字和点击链接关键字,这个页面资源能够像你期望的那样承担一些测试SUT的任务。它假设有一个名叫“Nissan”的链接在 Nissan corporate 页面上,然而每个人都可以改变这个页面,也就是说决定重写这个页面,如在Nissan Motorsports页面改变链接叫“Manufacture“来代替 “Nissan” ,如果你有200个测试通过这个操作(搜索和点击)和直接重复浏览这个方法(是由于你手动剪切和粘贴),你需要改变200个测试。然而由于你使用了页面资源模式你仅需要改变一个文件从而节省了大量的时间。



这篇关于从页面对象到页面资源,robotframework如何布局,维护性更好的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1051584

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去