五分钟搞懂 POM 设计模式
大家好,我是测试蔡坨坨。
今天,我们来聊聊 Web UI 自动化测试中的 POM 设计模式。
为什么要用 POM 设计模式
前期,我们学会了使用 Python+Selenium 编写 Web UI 自动化测试线性脚本
线性脚本(以快递 100 网站登录举栗):
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get(“https://sso.kuaidi100.com/sso/v2/authorize.do”)
driver.maximize_window()
driver.find_element(By.ID, ‘name’).send_keys(“***********”)
driver.find_element(By.ID, ‘password’).send_keys(“***********”)
driver.find_element(By.ID, ‘submit’).click()
time.sleep(2)
text = driver.find_element(By.PARTIAL_LINK_TEXT, ‘首页’).text
assert text == ‘首页’
driver.close()
使用以上代码,最基础最简单的 Web UI 自动化测试就做起来了,但是,问题也随之而来,
线性脚本的缺点也暴露出来了:
Web UI 自动化测试,简单来说,就是模拟人在浏览器上的操作,打开浏览器-定位元素-
操作元素-模拟页面动作-断言结果
由于线性脚本中的元素定位、元素操作细节、测试数据、结果验证(断言)是捆绑在一起
的,代码会显得非常冗余、可读性差、不可复用、工作量大且可维护性差
刚开始,少数的测试用例维护起来可能很容易,但随着时间迁移、产品迭代、测试套件持
续增长,脚本也越来越臃肿,可能需要维护几十个页面,且很多页面是公用的,元素的任何
改变都会让我们的脚本变得繁琐复杂、耗时易出错。例如:十几个用例中都用到了 A 元素,
某一天 A 元素被前端改成了 B 元素,我们就需要去十几个用到 A 元素的地方,将 A 元素修
改为 B 元素
如果可以把公共元素抽取出来,即使元素被前端修改,我们也只需更新元素的定位方式,
而不用修改每条测试用例,无论多少用例用到该元素,都只需修改元素定位方式,重新获取
元素即可