Appium+Python之PO模型(Page object Model)

思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解。这里推荐大家在自动化框架中加入PO模型思想,那什么是PO模型呢?

所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作;至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可。

上面流程图意思就是测试用例类调用不同的页面类,页面类调用公共基类,基类里面封装定义定位页面元素和基本业务操作方法。

BasePage.py(页面基类脚本)

# -*- coding: utf-8 -*-
‘‘‘
Created on 2018-11-4
@author: 丹姐
Project:UI页面公共类
‘‘‘

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import selenium.common.exceptions
from selenium.webdriver.common.by import By

#定义页面基类
class BasePage(object):
    #初始化
    def __init__(self,driver):
        self.driver=driver

    # 重写元素定位方法
    def find_element(self,timeout,poll_frequency,type,*loc):
        element=WebDriverWait(self.driver, timeout, poll_frequency).until(
            EC.presence_of_element_located((type,*loc)))
        return element

    # 重写定义send_keys方法
    def send_keys(self,timeout,poll_frequency,type,loc,value):
        try:
                self.find_element(timeout,poll_frequency,type,loc).clear()
                return self.find_element(timeout,poll_frequency,type,loc).send_keys(value)
        except AttributeError:
            print("%s 页面中未能找到 %s 元素" % (self,loc))

    # 重写定义click方法
    def click(self,timeout,poll_frequency,type,*loc):
        return self.find_element(timeout,poll_frequency,type,*loc).click()

    # 重写多元素定位方法
    def find_elements(self,timeout,poll_frequency,index,type,*loc ):
        elements = WebDriverWait(self.driver, timeout, poll_frequency).until(
            EC.presence_of_all_elements_located((type, *loc)))
        return elements[index]

LoginPage.py(登录页面脚本)

# coding=utf-8
‘‘‘
Created on 2018-11-4
@author: 丹姐
Project:登录页面
‘‘‘
from src.common.BasePage import BasePage
from selenium.webdriver.common.by import By

# 定义登录页面类,父类是BasePage

class Login(BasePage):
    etUser_loc = "com.baidu.baidu:id/et_name"
    etPws_loc = "com.baidu.baidu:id/et_pass"
    btnLogin_loc = "com.baidu.baidu:id/rt_login"

    def login_in(self, username, password):
       print(u‘输入用户名‘, username)
        self.send_keys(10, 0.1, By.ID, self.etUser_loc, username)
        print(u‘输入密码‘, password)
        self.send_keys(10, 0.1, By.ID, self.etPws_loc, password)
        print(u‘点击登录按钮‘)
        self.click(20, 0.1, By.ID, self.btnLogin_loc)

TestCase.py(测试用例脚本)

# coding=utf-8
‘‘‘
Created on 2018-12-24
@author: 丹姐
Project:登录测试用例
‘‘‘
import unittest
from config import DriverConfigure
from src.pages.Login import Login

class Login(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        driver = DriverConfigure.get_driver()
        cls.driver = driver

    def setUp(self):
        self.login_page = Login(self.driver)

    def test_login(self):
        # 登录
        self.login_page.login_in("zhanghao", "123456")

    def tearDown(self):
        pass

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
if __name__ =="__main__":
 unittest.main()
 

原文地址:https://www.cnblogs.com/ZoeLiang/p/10217612.html

时间: 2024-08-28 17:41:05

Appium+Python之PO模型(Page object Model)的相关文章

Page Object Model (Selenium, Python)

时间 2015-06-15 00:11:56  Qxf2 blog 原文  http://qxf2.com/blog/page-object-model-selenium-python/ 主题 SeleniumPython We have come a long way since our post on implementing the Page Object Model - Implementing the Page Object Model (Selenium + Python) Whil

Page Object Model | POM (Selenium Webdriver For Python)

研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数调用,到重定义函数.从变量驱动,到数据驱动,再到关键字驱动,一步一步的默默走向自动化框架的构建.虽然还有没有投入使用,只是写几个demo,就慢慢的发现了 selenium自动用例脚本,相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改

Selenium的PO模式:Page Object Model

PO模式:全称:Page Object Model 简称POM,叫做页面对象,针对页面.UI界面 (译:配只.奥播摘可t.毛豆) 什么是Page Object Model 设计模式? 相似功能地方: 代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改,虽然几个用例看不出什么工作量,但是重复findElement的代码,已经让我们感到了代码的笨重.如果某些定位发生了改变,我们就得贯穿整个测试代码进行调整元素定位,这样就会导致我们的

Page Object Model

Page Object Model Framework which is also known as Page Object Design Pattern or Page Objects PO模式的最大优势是如果UI或者任何页面的HTML对象有了变化,测试并不需要任何改动.只有页面对象的代码受到了影响,却对测试代码无任何影响. Why? 想象一下当我们要处理100多个测试,包含了很多的stepDefinitions文件时项目中的代码行数会有多少?整个项目的代码将变得难以管理和维护.为了更好的管理

关于page object(PO)模型的介绍

点击链接加入QQ群 522720170(免费公开课.视频应有尽有):https://jq.qq.com/?_wv=1027&k=5C08ATe 所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作:至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可.这样的好处就是如果页面元素发生变化,你去维护页面类即可,测试类你基本不用管.(个人觉得理想丰满,现实骨感!) 说了这么多,估计还是会有童鞋不明白,那么就看看这张图,一

python+selenium自动化软件测试(第7章):Page Object模式

什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页面中的元素对象,比如输入用户名的输入框,输入登陆密码的输入框,登陆按钮,这个页面的url等,而方法,主要是指这个页面可以提供的具体功能.为什么选择POM?我们先看一段简单的代码如下: from selenium import webdriver import time driver = webdri

Page Object设计模式

1. 什么是框架 1.1 定义: 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件(类)及构件(类)实例间交互的方法. 1.2 为什么要搭建自动化测试框架 自动化测试的开发,通常是由自动化测试的需求决定的.这个需求主要包括: 自动化测试更便于实施 解决自动化测试脚本本身存在的问题,如异常处理和场景恢复. 测试易于维护.好的框架,可以减少你在管理维护中所投入的人力物力精力. 可重用性.框架的意义之一就在于可重用吧.所以在框架里,你可以实现一些通用功能,简化脚本开发过程. 

Test Automation With Selenium Using Page Object Design

WebDriver IntroductionA different way of automating the browser.. Create a browser-specific driver to control the browser directly and have to do this for each browser. Object oriented API. Doesn't need a real browser. No JavaScript limitations. No n

python+ selenium&APPium page Object 设计模式

题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录: Page Object Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对象来对应页面的一个应用.故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型.体现在对界面交互细节的封装,测试在更上层使用页