本文主要是介绍从页面对象到页面资源,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如何布局,维护性更好的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!