• selenium2学习:Page object


    1       Page object

    Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,主要体现在对界面交互细节的封装,在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例的可维护性。

    简单来说就是:PageObject是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。可以使代码复用,降低维护成本,提高程序可读性和编写效率。

    PageObject可以将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。

    Page 队形应当将在GUI空间上所有查询和操作数据的行为封装为方法,一个好的经验法则是:即使改变具体的空间,page对象的接口也不应当发生变化。将页面中有重要意义的元素独立为一个page对象,通过给页面建模,使其对应用程序的使用者变得有意义。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    from selenium.webdriver.support import expected_conditions as EC
    
    class Page(object):
        '''基础类,用于页面对象类的继承'''
        login_url = 'https://mail.qq.com'
        def __init__(self,selenium_driver,base_url=login_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 switch_frame(self,loc):                                   #1定义切换函数
            return self.driver.switch_to_frame(loc)
    
        def find_element(self,*loc):
            return self.driver.find_element(*loc)
    
    
    
    class loginPage(Page):
        '''qq邮箱登录页面模型'''
        url = '/'
        #定位器
        loginframe_loc ='login_frame'                                 #2应切换的目录,因为切换函数仅仅需要变量,所以loginframe_loc的赋值同username_loc不一样,后续的调用也不需*
        username_loc = (By.ID, 'u')
        password_loc = (By.ID, 'p')
        submit_loc = (By.ID, 'login_button')
    
        #操作
        def switch_to_loginframe(self):                               #3定义窗口切换函数:调用切换函数,并关联上切换目录
            self.switch_frame(self.loginframe_loc)
    
        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 qqmail_login(driver,username,passowrd):
        login_page = loginPage(driver)
        login_page.open()
        login_page.switch_to_loginframe()                             #4调用窗口切换函数:
        #login_page.driver.switch_to.frame('login_frame')             1~4:可以直接使用该语句:         
        login_page.type_username(username)
        login_page.type_password(passowrd)
        login_page.submit()
    
    def main():
        try:
            driver = webdriver.Chrome()
            username = '492000'
            password = '567899'
            qqmail_login(driver, username, password)
            sleep(3)
            user = driver.find_element(By.ID,'useralias').text
            assert (user == '登录后的名称), '邮箱登录失败了!——邮箱名错误'
        finally:
            print('测试完毕')
            driver.close()
    
    if __name__ == '__main__':
        main()

    注:为了切换窗口函数的调用的调用,真的是,N个小时过去了~

    坑太多了,走过最长的路就是:失败是成功之母这条套路,成功兄,你真的有太多的 母……母……母……母……母……了

     
  • 相关阅读:
    apache与tomcat负载集群的3种方法
    JFinal 源码分析 [DB+ActiveRecord]
    通过PowerShell获取TCP响应(类Telnet)
    Linux 硬盘分区、分区、删除分区、格式化、挂载、卸载
    常用EXE文件反编译工具
    Shell采集系统cpu 内存 磁盘 网络信息
    MyEclipse运行很慢的原因
    Java令牌生成器
    Shell 编程基础之基本语法结构汇总
    Shell 编程基础之注意技巧
  • 原文地址:https://www.cnblogs.com/jxba/p/9062911.html
Copyright © 2020-2023  润新知