• 自动化设计之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个不同的页面操作,放在一个脚本里,后续更新。

  • 相关阅读:
    Laravel 404错误,Laravel根目录可以访问,非根目录就会出现404 页面找不到的错误
    laravel 终端自动创建控制器
    在 Windows 中安装 Laravel 5.1.X
    CentOS 6.5 Apache搭建虚拟主机
    Host '192.168.1.21' is not allowed to connect to this MySQL server
    用数组实现栈(C++)
    C++入门级小算法
    一些简单小算法
    C++中的大数乘的实现
    指针数组和数组指针
  • 原文地址:https://www.cnblogs.com/JacquelineQA/p/13052925.html
Copyright © 2020-2023  润新知