PageObject模式最佳实践

想要事半功倍地提高WEB自动化的开发和维护效率,解决实现page object模式过程中的各种问题才是首要考虑因素。

When you write tests against a web page, you need to refer to elements within that web page in order to click links and determine what's displayed. However, if you write tests that manipulate the HTML elements directly your tests will be brittle to changes in the UI. A page object wraps an HTML page, or fragment, with an application-specific API, allowing you to manipulate page elements without digging around in the HTML.

--Martin Fowler

当我们试图去测试一个WEB页面时,不得不依赖页面上的元素去进行交互并确认程序应用是否正常运行。然而当你的脚本试图直接操作页面上的HTML元素时,一旦有相关UI的变更,那测试将会变得十分脆弱。Page object模式就是对HTML页面以及元素细节的封装,并对外提供应用级别的API,使你摆脱与HTML的纠缠。

--Martin Fowler

处理繁杂冗长的元素交互

从上述代码中可以看出,一个最简单的登陆页面,只接收用户名、密码两个参数,剩下的就是与页面上元素交互的细节了。

此处的问题在于,虽然已遵循了page object模式,并将元素的细节进行了封装,但是一个简单的登陆动作,却不得不用许多冗余的代码去实现交互逻辑。

如下图所示:

查找元素——>操作元素——>查找元素——>操作元素….

代码行数随着元素的增加而变得越来越冗长,更不用说为了保证与每个元素交互的稳定性问题而加入的异常处理和等待时间了,一旦UI层有较大的交互逻辑变更,将直接导致每个page object的维护成本急剧上升,直至难以维护的地步。

因此,可以预见到随着页面以及元素交互越来越多,代码会变得又臭又长。

统一的元素交互入口

我们不妨改变一下思路,以单个行为为单位将所有需要进行交互的元素一并打包进行统一处理。

优化后的代码:

可以看到这里的元素交互远比之前的登陆操作冗长且复杂得多,但代码却更简洁了。这样在页面元素或交互逻辑有变更时(UI层的变化可谓家常便饭),只需适当修改元素的定位器和元素的传入顺序就行了,也就极大的降低了UI测试的维护成本。

然而要真正实现这样的模式,还需要考虑以下几点:

动态匹配元素类型以及对应的处理方式

这里需要注意的是除了支持标准的HTML元素操作外,还需要支持自定义的标签。也就是说对于一个标准的button元素来说对它的操作只有click,然而对一个div来说可能支持所有的类型操作(click,input,drag drop…等等)。

以可以进行拖拽操作的span为例,我们还需要对它的定位器进行重写,这样在程序处理此类元素时才能被正确处理。

统一的异常处理

为了保证UI自动化运行的稳定性,我们通常会在每个交互之间添加一些异常处理,也就是对元素的识别和交互进行等待和重试的过程,然而由于现代前端实现的复杂性和功能的多样性使得对进行稳定的交互操作更加困难,以至于在page object交互操作逻辑中的任意一个步骤都可能产生不能识别、不能操作等异常。通常的解决方式是直接在交互步骤中嵌入异常处理的代码。但显而易见的是这么做肯定会导致又臭又长甚至源源不绝的异常处理逻辑,同样会导致无法维护的恶果。

使用代理模式拦截所有的异常并进行统一处理。

如此一来我们会发现,当在perform_actions中处理被代理元素对象时再也不用担心访问其属性时出现异常而导致测试失败了,不用添加额外代码就能使测试稳定运行。

关于建模粒度

有时在对页面进行建模时,除了创建page object外,经常会遇到另外一个问题,那就是是否还需要对页面上的元素进行建模呢?

答案是否定的。

原因是UI经常变化,而页面元素则更易变,如果按照上图方式对每个元素都进行建模,那肯定是事倍功半的,因为你很有可能会花绝大部分的时间在添加和删除代码文件上。

其实我们可以把存在于一个页面中某些逻辑紧密的UI元素直接定义为若干个page objects,这样做可以大幅度减少不必要的关于元素代码的文件产生,并且使原本看似十分松散凌乱的UI元素以更合理的结构呈现出来,弱化了元素间的耦合度。

结语

以上就是关于在实现page object模式过程中遇到的一些实际问题。可以看出一旦处理好对页面元素的交互与控制,将会极大提高WEB自动化的开发与维护效率。

本文编译:钱俊杰 Chester Qian(点融黑帮),现任点融网高级测试开发工程师。负责公司贷款业务应用质量保证,测试框架、工具开发与维护。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,103评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 自从当了新手妈妈时间就不是自己的了,整颗心一天到晚放在小宝贝身上。然而小宝贝似乎对我并不买账,和老公比起来我只能是...
    瓶宝儿妈阅读 637评论 0 0
  • 两年以后,我坐在教室,看着窗户外面的大树发呆的时候,突然想起我们营区也有许多大大小小的植物。 不光营区...
    小可爱爸爸阅读 274评论 0 0
  • 如果你对现在的生活不够满意,希望实现跃迁,那我们一起来探讨哪些行动让改变发生,让梦想达成。也就是说,我希望这篇文章...
    心灵平静财务自由阅读 414评论 0 0