zoukankan      html  css  js  c++  java
  • 自动化设计之POM初识

    自动化设计模式

    1.关键字驱动:将selenium进行二次封装,为用户自定义关键字,基于关键字,结合数据驱动的形式实现自动化测试的执行。

    2.POM:页面对象模型,将所有页面全部列举,形成页面对象库,将核心流程要操作的元素与操作行为进行封装与管理,可以对系统的页面进行精准的操作,保障了自动化测试的成功率。

    编程思想

    测试编码规范:低耦合,高内聚(模块的独立性增强,模块与模块之间的关联性减弱)

    3.实现了架构的分层:

    基类,页面对象类,测试类,测试数据类

    4.自动化的问题:1,阅读性差 2.维护性差 3,代码冗余 4.解决团队自动化设计构建的问题

    5.举例代码:

    POM 实现百度搜索和京东登录2个页面

    创建如下包和文件

    6.基类base代码如下:

    from selenium import webdriver
    from time import sleep
    #基类:在所有页面中,一些公共的内容需要执行,
    # 1,定位元素,2,启动浏览器,访问url 3,关闭浏览器,释放资源
    class BasePage(object):
    # driver=webdriver.Chrome()
    #构造函数
    def __init__(self,driver,url):
    self.driver=driver
    self.url=url
    #定位元素:要对定位的元素进行操作,需要return
    def locator(self,loc):
    return self.driver.find_element(*loc)
    #访问url
    def open(self):
    self.driver.get(self.url)
    #释放资源
    def quit(self):
    sleep(2)
    self.driver.quit()
    7.百度搜索文件代码
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from base_page.base import BasePage
    #百度搜素页面对象:实现百度的搜索流程
    #1.获取元素流程相关联的元素(输入框,按钮)
    #2.将元素操作进行定义(输入,点击)

    class SearchPage(BasePage):
    #获取关联元素
    input_el=(By.ID,"kw")
    click_el=(By.XPATH,'//input[@id="su"]')
    #页面url
    url='http://www.baidu.com'
    #元素操作进行封装
    def input_text(self,txt):
    self.locator(self.input_el).send_keys(txt)

    def click(self):
    self.locator(self.click_el).click()

    #测试代码
    def test_search(self,txt):
    self.open()
    self.input_text(txt)
    self.click()
    self.quit()

    if __name__ == '__main__':
    driver=webdriver.Chrome()
    txt="just a test"
    sp = SearchPage(driver,SearchPage.url)
    sp.test_search(txt)

    8.京东登录代码
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from base_page.base import BasePage
    from page_object.search_page import SearchPage
    from time import sleep

    class LoginPage(BasePage):
    #元素获取

    username=(By.XPATH,'//*[@name="loginname"]')
    pwd=(By.XPATH,'//*[@name="nloginpwd"]')
    login_el=(By.XPATH,'//*[@id="loginsubmit"]')

    #指定url
    url='https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F'

    #元素操作

    def input_username(self,un):
    self.locator(self.username).send_keys(un)

    def input_pwd(self,pwd):
    self.locator(self.pwd).send_keys(pwd)

    def click(self):
    self.locator(self.login_el).click()

    def login(self,un,pwd):
    self.open()
    sleep(10)#手动点击账户登录
    self.input_username(un)
    self.input_pwd(pwd)
    sleep(10)#手动处理验证码
    self.click()
    self.quit()

    if __name__ == '__main__':
    driver=webdriver.Chrome()
    username='*****'
    pwd='*****'
    sp=SearchPage(driver,SearchPage.url)
    lp=LoginPage(driver,LoginPage.url)
    lp.login(username,pwd)

    脚本还可以进行优化和进行修改,可以同时运行2个不同的页面操作,放在一个脚本里,后续更新。

  • 相关阅读:
    C++三大特性之多态
    内向者沟通圣经:4P法(Preparation,Presence,Push,Practice)
    RTP/RTCP、TCP、UDP、RTMP、RTSP
    网络七层协议
    预防U盘被病毒侵害的方法
    Win8安装程序出现2502、2503错误解决方法
    小L的区间求和
    【剑指offer-12】矩阵中的路径
    【剑指offer】数值的整数次方
    【剑指offer】二进制中1的个数
  • 原文地址:https://www.cnblogs.com/JacquelineQA/p/13052925.html
Copyright © 2011-2022 走看看