从页面对象到页面资源,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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

49个权威的网上学习资源网站

艺术与音乐 Dave Conservatoire — 一个完全免费的音乐学习网站,口号是“让每一个人都可以接受世界级的音乐教育”,有视频,有练习。 Drawspace — 如果你想学习绘画,或者提高自己的绘画技能,就来Drawspace吧。 Justin Guitar — 超过800节免费的吉他课程,有自己的app,还有电子书、DVD等实用内容。 数学,数据科学与工程 Codecad

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

PHP7扩展开发之对象方式使用lib库

前言 上一篇文章,我们使用的是函数方式调用lib库。这篇文章我们将使用对象的方式调用lib库。调用代码如下: <?php $hello = new hello(); $result = $hello->get(); var_dump($result); ?> 我们将在扩展中实现hello类。hello类中将依赖lib库。 代码 基础代码 这个扩展,我们将在say扩展上增加相关代码。sa

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

Weex入门教程之3,使用 Vue 开发 Weex 页面

环境安装 在这里简略地介绍下,详细看官方教程 Node.js 环境 Node.js官网 通常,安装了 Node.js 环境,npm 包管理工具也随之安装了。因此,直接使用 npm 来安装 weex-toolkit。 npm 是一个 JavaScript 包管理工具,它可以让开发者轻松共享和重用代码。Weex 很多依赖来自社区,同样,Weex 也将很多工具发布到社区方便开发者使用。