zoukankan      html  css  js  c++  java
  • 自动化测试---PageObjects快速入门(一)

    PageObject快速入门

    介绍:

    Page Object是selenium的一种设计模式, 是在web自动化测试中将一个页面设备成一个class或基础库来实际的方法
    这种模式的好处有以下几点:
    1、让代码可以在不同的测试case或场景中可以重用
    2、减少重复代码的数量
    3、当测试界面发生改变时,只需要优化对应class或库即可

    示意图如下:

    首先,我们要做的第一件事就是区分页面本身和页面上的元素。

    其次,就是要进行对自动化用例的设计,分析我们需要测试验证哪些功能点

    实例操作:

    根据Selenimu Python API中PageObject的实例我们实际操作一下

    很简单的一个实例,打开www.python.org网站然后进行搜索关键字,如下图所示

    测试点分析:

    分析一下测试点,主要有两个动作:

    1、打开www.python.org网站,确定是否打开

    2、如果打开后就进行关键字搜索

    编码:

    根据PageOjbect模式,在eclipse中建立下面的对像文件

    相关代码如下:

    页面元素

    element.py:

    #coding:utf-8
    '''
    Created on 2015-11-13
    @author: Administrator
    '''
    from selenium.webdriver.support.ui import WebDriverWait
    
    class BasePageElement(object):
        
        def __set__(self,obj,value):
            
            driver=obj.driver
            WebDriverWait(driver,100).until(lambda driver: driver.find_element_by_name(self.locator()))
            driver.find_element_by_name(self.locator).send_keys(value)
            
        def __get__(self,obj,owner):
            
            driver=obj.driver
            WebDriverWait(driver,100).until(lambda driver : driver.find_element_by_name(self.locator()))
            element=driver.find_element_by_name(self.locator)
            return element.get_attribute('value')
        

    page.py

    #coding:utf-8
    '''
    Created on 2015-11-13
    @author: Administrator
    '''
    from element import BasePageElement
    from locators import MainPageLocators
    
    class SearchTextElement(BasePageElement):
        
        locator='q'
        
    class BasePage(object):
        
        def __init__(self,driver):
            self.driver=driver
    
    class MainPage(BasePage):
        
        search_text_element=SearchTextElement()
        
        def is_title_matchs(self):
            
            return 'Python' in self.driver.title
        
        def click_go_button(self):
            
            element=self.driver.find_element(*MainPageLocators.GO_BUTTON)
            element.click()
            
        
    class SearchResultsPage(BasePage):
        
        def is_result_foun(self):
            
            return "No results found." not in self.driver.page_source

    locators.py

    #coding:utf-8
    '''
    Created on 2015-11-13
    @author: Administrator
    '''
    from selenium.webdriver.common.by import By
    
    class MainPageLocators(object):
        
        GO_BUTTON=(By.ID,'submit')
        
    class SearchResultsPageLocators(object):
        
        pass

    最后就是测试用例

    testcase.py

    这里用的chrome

    #coding:utf-8
    '''
    Created on 2015-11-13
    @author: Administrator
    '''
    
    import unittest
    from selenium import webdriver
    import page
    
    class PythonOrgSearch(unittest.TestCase):
        
        def setUp(self):
            chrome_driver_path=r'C:\Program Files (x86)GoogleChromeApplicationchromedriver.exe'
            self.driver=webdriver.Chrome(chrome_driver_path)
            self.driver.get('http://www.python.org')
            
        def test_search_in_python_org(self):
            
            main_page=page.MainPage(self.driver)
            assert main_page.is_title_matchs(), "python.org title doesn't match."
            main_page.search_text_element='pycon'
            main_page.click_go_button()
            search_result_page=page.SearchResultsPage(self.driver)
            
            assert search_result_page.is_result_foun(), "No result found"
            
        def tearDown(self):
            self.driver.close()
    
    if __name__=="__main__":
        unittest.main()

    从这里可以看出,如果UI界面改动了,只需要更改page里的相关接口,不需要再次更改用例脚步。

    E-mail:362299908@qq.com

  • 相关阅读:
    【REACT HOOKS】useState是如何保存并更新数据的?
    CSS Modules 使用
    【TS】一些常用的工具类型
    【TS】type和interface的区别
    【TS】unknown类型
    判断虚拟导航栏(NavigationBar)是否显示
    本地的FTP服务器
    Cocos2d-x3.3RC0的Android编译Activity启动流程分析
    Eclipse/MyEclipse 最最常用的快捷键
    anroidstudio log
  • 原文地址:https://www.cnblogs.com/landhu/p/4962323.html
Copyright © 2011-2022 走看看