zoukankan      html  css  js  c++  java
  • Selenium关于Page Objects

    介绍页面对象设计模式。一个页面对象表示在你测试的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
  • 相关阅读:
    1-1-折纸问题
    调整数组顺序使奇数位于偶数前面
    在O(1)时间删除链表结点
    打印1到最大的n位数
    数值的整数次方
    二进制中1的个数
    变态跳台阶
    旋转数组的最小数字
    用两个栈实现队列
    Swift学习笔记(5):集合类型
  • 原文地址:https://www.cnblogs.com/sundalian/p/5128850.html
Copyright © 2011-2022 走看看