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
  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/sundalian/p/5128850.html
Copyright © 2011-2022 走看看