object设计模式.py

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom time import sleep#创建page类:class Page(object):    """    基础类、用于页面对象类的继承    """    login_url = "http://www.126.com"    def __init__(self,selenium_driver,base_url = login_url):        """        首先创建一个基础类Page,在初始化方法init)中定义驱动(driver)、基本的URL        (base_url)和超时时间(timeout)等。        :param selenium_driver:        :param base_url:        """        self.base_url = base_url        self.driver = selenium_driver        self.timeout = 30

    def on_page(self):        return self.driver.current_url == (self.base_url + self.url)

    def _open(self,url):        url = self.base_url + url        self.driver.get(url)        assert self.on_page(),"Did not land on %s" %url

    def open(self):        self._open(self.url)

    def find_element(self,*loc):        return self.driver.find_element(*loc)

"""定义open)方法用于打开URL网站,但它本身并未做这件事情,而是交由_open)方法来实现。关于URL地址的断言部分,则交由on page()方法来实现,而find_element)方法用于元素的定位。"""

#创建LoginPage类:class LoginPage(Page):    """    126邮箱登录页面模型    LoginPage类中主要对登录页面上的元素进行封装,使其成为更具体的操作方法。例如,用户名、密码和登录按钮都被封装成了方法。    """    url = "/"    #定位器    username_loc = (By.ID,"idInput")    password_loc = (By.ID,"pwdInput")    submit_loc = (By.ID,"loginBtn")    #Action    def type_username(self,username):        self.find_element(*self.username_loc).send_keys(username)

    def type_password(self,password):        self.find_element(*self.password_loc).send_keys(password)

    def submit(self):        self.find_element(*self.submit_loc).click()

def test_user_login(driver,username,password):    """    测试获取的用户名/密码是否可以登录    test_user_login)函数将单个的元素操作组成一个完整的动作,而这个动作包含了打开浏览器、输入用户名/密码、点击登录等单步操作。在使用该函数时需要将driver、username、password等信息作为函数的入参,这样该函数具有很强的可重用性。    :param driver:    :param username:    :param password:    :return:    """    login_page = LoginPage(driver)    login_page.open()    login_page.type_username(username)    login_page.type_password(password)    login_page.submit()

def main():    try:        driver = webdriver.Firefox()        username = "username"        password = "123456"        test_user_login(driver,username,password)        sleep(3)        text = driver.find_element_by_xpath("//span[@id=‘spnUid‘]").text        assert (text == "[email protected]") #用户名称不匹配、登录失败!    finally:        #关闭浏览器窗口:        driver.close()

if __name__ == ‘__main__‘:    main()

原文地址:https://www.cnblogs.com/zhang-da/p/12210535.html

时间: 2024-08-03 03:12:19

object设计模式.py的相关文章

Page Object设计模式实践

Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对象来对应页面的一个应用.故我们可以为每个页面定义一个类,并为每个页面的属性和操作构建模型.体现在对界面交互细节的封装,测试在更上层使用页面对象,在底层的属性或者操作的更改不会中断测试.减少代码重复,提高测试代码的可读性和可维护性. 下面将以登录qq邮箱为例,通过Page Object设计模式来实现.

Page Object 设计模式介绍

Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性. 1.认识 Paget Object Page Object 设计模式的优点如下: 减少代码的重复: 提高测试用例的可读性: 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目: Paget Object 使用注意: public方法代表Page提供的功能 尽量不要暴露Page的内

Selenium_Page Object设计模式

Page Object 介绍 Page Object设计模式的优点如下: 减少代码的重复 提高测试用例的可读性 提高测试用例的可维护性,特别是针对UI频繁变化的项目 当Web页面编写测试时,需要操作该Web页面上的元素,如果在测试代码中直接操作HTML元素,那么代码比较脆弱,因为UI频繁变动.可用到page对象封装成一个HTML页面,通过提供的API来操作页面元素. Page Object 实例 下面以登录163邮箱为例实现: 1 #!/usr/bin/env python 2 # _*_ co

python+ selenium&APPium page Object 设计模式

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

python-selenium Page Object设计模式

Page Object是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理.可以使代码复用,降低维护成本,提高程序可读性和编写效率. #用page object思想实现百度首页的搜索和登陆功能 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time class BaiduPage():   

Page Object设计模式

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

Page Object 设计模式-PO

1.传统测试用例实现的弊端: 易读性差 复用性差 可维护性差 扩展性差 2.PO 设计模式图: 3.Page Object 的核心要素: 抽象封装一个 BasePage 基类,基类应该拥有一个只想 webdriver 实例的属性: 每一个 page 都继承 BasePage,通过 driver 来管理(自己)page 中的元素(对象), 将 page 中的操作封装成一个个的方法 TestCase 继承 unitest.Testcase 类,并且依赖 page 类,从而实现相应的 teststep

(十九)PO设计模式

自动化应用在什么地方? 1.冒烟测试 2.回归测试 3.用户场景的测试 什么项目适合自动化? 1.测试任务明确,不会频繁变更 2.回归测试比较多 3.软件系统界面比较稳定,无频繁变更UI 4.大量的重复任务 5.与人工相比自动化能更省资源 6.项目不赶进度 6.测试组多位成员具备开发脚本能力 自动化测试用例注重点? 1.不是所有的手工用例都要转换成自动化测试用例 2.考虑到脚本开发成本,需要和人工测试成本做对比 3.最好是通过场景来设计测试用例,可抽出page模块,执行case,便于开发和维护

java 实现Active Object思想

我们一直在说并发编程,我们只知道JDK5有个并发编程包帮我们封装好了多线程下的复杂处理机制,这篇文章的重点不是说它的底层实现原理,只想说下并发包的编程模式思想,我以前一直在想这种思想来源于哪里,面向对象编程的好处应该就是能总结一种模式,只有定义了模式理解了模式,我们平常才能更好的理解一些复杂的编程,这就是抽象到理论的过程吧!我们的前辈把这些编程思想作为一种理论抽象成模式的概念,不就是方便我们更好的理解和接受编程的思想吗?不仅如此,在现在开源如火如荼的进行中,我们怎么通过代码来交流?我们怎么来更好