码迷,mamicode.com
首页 > 其他好文 > 详细

Selenium关于Page Objects

时间:2016-01-14 00:58:04      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:

介绍页面对象设计模式。一个页面对象表示在你测试的web页面用户交互的界面。

使用页面对象模式的有点:

  • 创建可重用的代码可以在多个测试用例中使用
  • 减少重复的代码量
  • 如果用户界面改变,只需要修改一个地方

 

1.Test case

下面的测试用例是在百度中搜索关键字,并返回相应的结果

import unittest
from selenium import webdriver
import page

class BaiduSearch(uinttest.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

Selenium关于Page Objects

标签:

原文地址:http://www.cnblogs.com/sundalian/p/5128850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!