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