【拉勾7期】企业微信web端自动化测试实战

标题

web 企业微信自动化实战

课程价值

  • 了解 PageObject 原理及六大原则
  • 掌握PageObject 封装思想
  • PageObject结合UI自动化测试实战

大纲

  • PageObject 原理及六大原则
  • 企业微信建模
  • BasePage的封装
  • 添加联系人测试用例

时长

120分钟

课堂源码链接

GitHub - ceshiren/HogwartsLG7: 霍格沃兹测试学院拉勾名企直推营第七期 https://ceshiren.com

课前准备

chrome debug登录

chrome复用浏览器

实战内容

为什么需要PageObject设计模式

想象一下,一个添加成员用例需要怎么做:

  1. 登录_login页面
  2. 登录后进入首页_main页面
  3. 点击添加成员_main页面
  4. 填写添加信息_add_member页面
  5. 点击保存_add_member页面
  6. 返回通讯录_add_membe页面
  7. 加断言做验证_contact页面

传统的web测试用例

def test_add_member(self):
   self.driver.get(“https://work.weixin.qq.com/wework_admin/frame#index")
   element_locator = (By.LINK_TEXT, “添加成员")
    WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable(element_locator))
    self.driver.find_element(*element_locator).click()
    self.driver.find_element(By.NAME, 'username').send_keys("abc")
    self.driver.find_element(By.NAME, 'english_name').send_keys("abc")
    self.driver.find_element(By.NAME, "acctid").send_keys("abc")
    self.driver.find_element(By.CSS_SELECTOR, '.ww_telInput_zipCode_input input').click()
    self.driver.find_element(By.CSS_SELECTOR, 'li[data-value="853"]').click()
   assert...

如果需要多添加一个步骤,从首页->通讯录->添加成员应该怎么改

  1. 登录_login页面
  2. 进入首页_main页面
  3. 点击通讯录_main页面
  4. 点击添加成员_contact页面
  5. 填写添加信息_add_member页面
  6. 点击保存_add_member页面
  7. 返回通讯录_add_member页面
  8. 加断言做验证_contact页面

对应的自动化测试代码

def test_add_member(self):
   self.driver.get(“https://work.weixin.qq.com/wework_admin/frame#index")
   element_locator = (By.LINK_TEXT, “添加成员")
    WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable(element_locator))
    self.driver.find_element(*element_locator).click()
    self.driver.find_element(By.NAME, 'username').send_keys("abc")
    self.driver.find_element(By.NAME, 'english_name').send_keys("abc")
    self.driver.find_element(By.NAME, "acctid").send_keys("abc")
    self.driver.find_element(By.CSS_SELECTOR, '.ww_telInput_zipCode_input input').click()
    self.driver.find_element(By.CSS_SELECTOR, 'li[data-value="853"]').click()
   assert...

传统UI自动化测试用例的问题

  • 无法适应UI变化,UI变化会导致大量的case需要修改
  • 无法清晰表达业务用例场景
  • 大量的样板代码driver find click

PageObject原理以及六大原则

参考资料与官网链接

马丁福勒个人博客

PageObject

selenium 官方网站:

/documentation/test_practices/encouraged/page_object_models/

PO设计思想

PO六大原则

一定要活学活用,不要死搬硬套

原则解读

  • 方法意义
    • 用公共方法代表UI所提供的功能
    • 方法应该返回其他的PageObject或者返回用于断言的数据
    • 同样的行为不同的结果可以建模为不同的方法
    • 不要在方法内加断言
  • 字段意义
    • 不要暴露页面内部的元素给外部
    • 不需要建模UI内的所有元素

实战练习思路

image

实战练习-企业微信建模

在线绘制plantuml网站

PlantUMLServer

添加成员时序图


@startuml

participant 注册页面 as register

participant 登录页面 as login

participant 企业微信主页面 as main

participant 通讯录页面 as contact

participant 添加成员页面 as add_member


@enduml

实战练习-添加联系人测试用例

实战练习-BasePage的封装

实战练习-回顾

作业

课后调查表单