一、什么是POM

POM page object model 页面对象模型 WEB自动化测试框架应用最为广泛的一种框架设计模式
设计思路:web项目由很多页面组成,把每个页面当做页面对象来进行设计
Python专题:什么是对象?通过类描述一组对象 对象=属性+方法
码尚电商项目=n个页面=登录页面=对每个页面设计对应页面类=相同属性+相同的方法
登录页面=对每个页面设计对应页面类=相同属性+相同的方法
class LoginPage:
#属性?元素、页面标题…
#方法?你在页面进行操作/行为:点击、定位、输入…等等元素及页面的操作
每个页面有相同的属性及方法 比如:点击、输入、元素定位
基于POM进行设计分为四层进行架构:
第一层 basepage层 每个页面有相同的属性及方法 比如:点击、输入、元素定位
第二层 pageobjects层 针对每个页面定义页面类 每个页面有独有的属性及方法
登录页面 LoginPage类
注册页面 RegisterPage类
第三层 TestCases层 用例层包含项目的业务流程
第四层 TestData 测试数据

二、如何基于POM进行自动化框架架构?

1、base层封装

  1. import time
  2. from selenium import webdriver
  3. from selenium.webdriver.common.by import By
  4. class BasePage:
  5. """
  6. BasePage:定义每个页面的相同属性及方法
  7. 相同属性?获取浏览器驱动对象(数据)
  8. 相同方法?元素定位、点击、输入...等等操作
  9. """
  10. def __init__(self,driver=webdriver.Chrome()):
  11. self.driver=driver
  12. def locator(self,loc):
  13. """元素定位"""
  14. # loc=(By.LINK_TEXT,"登录")
  15. # WebElement对象
  16. return self.driver.find_element(*loc)
  17. def input(self,loc,value):
  18. """输入"""
  19. self.locator(loc).send_keys(value)
  20. def click(self,loc):
  21. """点击"""
  22. self.locator(loc).click()
  23. def sleep(self,s):
  24. time.sleep(s)

2、pageobjects层封装

  1. import time
  2. from selenium.webdriver.common.by import By
  3. from class09.base.basepage import BasePage
  4. class LoginPage(BasePage):
  5. """
  6. 登录页面类=页面独有的属性及方法
  7. 页面独有的属性:页面元素定位
  8. 方法:登录页面的操作
  9. """
  10. #登录页面的属性
  11. el_username=(By.ID,"user_name")
  12. el_password=(By.ID, "password")
  13. el_login=(By.XPATH, "//input[@name='Submit']")
  14. url="http://47.107.116.139/shopnc/shop/index.php?act=login&op=index"
  15. #方法
  16. def login(self,usname,passwd):
  17. #实现登录的步骤
  18. self.driver.get(self.url)
  19. self.sleep(2)
  20. # 输入用户名
  21. self.input(loc=self.el_username,value=usname)
  22. # 输入密码
  23. self.input(loc=self.el_password,value=passwd)
  24. # 点击登录
  25. self.click(loc=self.el_login)
  26. time.sleep(2)
  27. class GoodlistPage(BasePage):
  28. pass

3、TestCases层封装

  1. import unittest
  2. from class09.pageobjects.webpage import LoginPage
  3. class TestLogin(unittest.TestCase):
  4. def test_login(self):
  5. # 实例化对象
  6. loginpage=LoginPage()
  7. username = "xingyao"
  8. password = "mashang"
  9. loginpage.login(username,password)

三、POM设计的意义?

本次的作业:
1、把线性脚本基于pom进行设计和封装
完成登录页面及页面列表页面的封装,覆盖登录及选择商品的封装
电商后台地址:http://47.107.116.139/shopnc/admin/index.php?act=login&op=login
电商商城地址:http://47.107.116.139/shopnc/shop/
商家管理系统
后台账号:admin 密码:msjy123
商家账号账号:mashang 密码:msjy123
会员账号
账号1及密码:admin msjy123
账号2及密码:xingyao mashang