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

相关文章

CSS3 布局样式及其应用举例

《CSS3布局样式及其应用举例》CSS3的布局特性为前端开发者提供了无限可能,无论是Flexbox的一维布局还是Grid的二维布局,它们都能够帮助开发者以更清晰、简洁的方式实现复杂的网页布局,本文给... 目录深入探讨 css3 布局样式及其应用引言一、CSS布局的历史与发展1.1 早期布局的局限性1.2

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3