自动化测试---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

原文地址:https://www.cnblogs.com/landhu/p/4962323.html