您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
Selenium关于Page Objects
作者:网络转载 发布时间:[ 2016/3/15 13:41:14 ] 推荐标签:软件测试工具 功能测试工具

  介绍页面对象设计模式。一个页面对象表示在你测试的web页面用户交互的界面。
  使用页面对象模式的有点:
  · 创建可重用的代码可以在多个测试用例中使用
  · 减少重复的代码量
  · 如果用户界面改变,只需要修改一个地方
  1.Test case
  下面的测试用例是在百度中搜索关键字,并返回相应的结果
import unittest
from selenium import webdriver
import page
class BaiduSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("http://www.baidu.com")
def test_search_in_baidu(self):
main_page = page.MainPage(self.driver)
#断言标题关键字
assert main_page.is_title_matches(), "baidu title doesn't match."
#设置搜索的关键字
main_page.search_text_element = "selenium"
main_page.click_go_button()
search_results_page = page.SearchResultsPage(self.driver)
#断言结果页面不是空的
assert search_results_page.is_result_found(), "No result found."
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
  2.Page object classes
  页面对象模式将为每个web页面创建一个对象。按照这种方式分层测试代码和实现。
  新建page.py,代码如下:
from element import BasePageElement
from locators import MainPageLocators
class SearchTextElement(BasePageElement):
locator = 'kw'
class BasePage(object):
"""被所有页面调用的页面初始化的基础类"""
def __int__(self, driver):
self.driver = driver
class MainPage(BasePage):
"""主页面的方法"""
search_text_element = searchTextElement()
def is_title_match(self):
return "selenium" in self.driver.title
def click_go_button(self):
elemnt = self.driver.find_element(*MainPageLocators.GO_BUTTON)
element.click()
class SearchsultsPage(BasePage):
"""搜索结果页面的方法"""
def is_results_found(self):
return "No results found." not  in self.driver.page_source
  3.Page elements
  新建element.py 代码如下:
from selenium.webdriver.support.ui import WebDriverWait
class BasePageElement(object):
def __set__(self, obj, vaule):
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")
  4.Locators
  将定位到的元素分离,同一个页面的定位的元素属于同一个类
  新建locators.py 代码如下:
  from selenium.webdriver.common.by import By
  class MainPageLocators(object):
  """所有主页面定位到的元素"""
  GO_BUTTON = (By.ID, 'su')
  class SearchResultsPageLoactors(object):
  """所有搜索结果定位的元素"""
  pass

软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd