0%

RobotFramework实现Page Object设计模式的应用——GUI测试进阶

第一次用RobotFramework-SeleniumLibrary写网页的GUI测试,封装关键字,按功能模块划分关键字。后来一次系统层面的UI重构,所有用例要重新写,成本很大,遂找到2013年提出,2015成熟的Page Object设计模式。基于页面或重用组件封装,仅将人类能交互的操作封装为方法。抽象后,可读性、可维护性大增。

选型

一开始选择的NCBI的,文档详尽,功能较多,缺点是实现较复杂,坑是要指定对应的Selenium2Library的版本,对新的版本要改import,觉得不方便,什么还有别的问题。
后来选择使用较新的boakley的实现,实现上比较简单,功能与PageObject的意思都到了。缺点是没有完全按照PageObject的设计理念,方法返回值不一定是某页面或具体值,如果学院派地看,甚至可以说没有实现PageObject也是成立的。

实战后总结

2020-01-14 Updated
PageObject定义页面和元素xpath关系即可,页面动作如果非必要,不用为某个页面定义动作。因为大部分的操作还是点击和输入,这个在更底层应该封装好。无论在RobotFramework还是纯代码实现上,都可遵从此原则

实际项目举例

草稿

commodityIndex 商品首页

  1. click_n_frame_contract(index) 点击第n个框架
  2. search(key) 搜索
  3. clear_search() 清除搜索
  4. switch_row_display() 切换紧凑行显示
  5. switch_col_display() 切换宽松列显示
  6. click_n_pic(commodity_type) 该方法点击某类的第n个商品图片
  7. test66 意大利TIM 配置按钮(按名字定位)
  8. click_commodity_by_name(name) 点击商品名
  9. click_n_more(commodity_type) 点击某个类型下的more、收起动作

commodityIndexAll 商品首页(无左边栏)空的页面

commodityDetails 商品详情页

  1. get_product_id() 获取商品id
  2. click_configuration_tab() 点击配置页
  3. click_product_specification_tab() 点击规格页
  4. add_n(n) 添加n个商品到购物车【输入框 限制】
  5. click_customize() 点击客制化按钮
  6. 维保选择
  7. test66能源店:多选基础服务,其他数量、描述超过4行

commodityCustomize 商品定制化页

该页定制化情况太多,不太好封装

  1. input_name(name)
  2. click_text(text) 根据文本内容点击配件,要搭配滚屏
  3. input_num(text, n) 根据文本定位对应的输入框,输入数字
  4. select_num(text, choice) 根据文本定位对应的输入框,下拉选择
  5. view_result() 切换到定制结果
  6. view_config()切回来
  7. get_product_price() 获取定制结果的产品价格
  8. get_Service_price() 获取定制结果的服务价格
  9. add_n(n) 添加n个商品到购物车
  10. 参数正确性-协议
  11. 展开收缩

commodityQuery

暂不处理

common

可以按text来点击
太长或太宽,要先滚动
自定义商品参数正确性,建议使用协议

命名规范:
input_xxx
click_xxx
select_xxx
组合动作按实际业务命名
click_n_xxx:xxx取列头的名字,或类型