zoukankan      html  css  js  c++  java
  • python3+selenium框架设计01-Page Object

    页面对象模型Page Object Modal是一种脚本设计模型,将页面元素,业务操作分割,当实际页面发生变化的时候,只需要修改页面元素文件,业务操作不需要修改。

    具体实现需要先写一个页面公共类,里面写公共的方法,比如把元素定位,元素操作等方法重新封装。之后所有页面类继承页面公共类,页面类中只写该页面需要定位的元素,并把对应元素的操作封装成一个个方法。最后测试类调用这些方法组成一个业务测试用例。

    还是以百度搜索为例子

    framework包下面放一些公共类

    pageobject包下面放需要测试的页面类

    testsuites包下面放对应页面的测试类

    class BasePage(object):
    
        def __init__(self,driver):
            self.driver = driver
    
        def find_element(self,selector):
            by = selector[0]
            value = selector[1]
            element = None
            if by =='id' or by =='name' or by == 'class' or by == 'tag' or by =='link' or by =='plink' or by =='css' or by == 'xpath':
                if by == 'id':
                    element = self.driver.find_element_by_id(value)
                elif by == 'name':
                    element = self.driver.find_element_by_name(value)
                elif by == 'class':
                    element = self.driver.find_element_by_class_name(value)
                elif by == 'tag':
                    element = self.driver.find_element_by_tag_name(value)
                elif by == 'link':
                    element = self.driver.find_element_by_link_text(value)
                elif by == 'plink':
                    element = self.driver.find_element_by_partial_link_text(value)
                elif by == 'css':
                    element = self.driver.find_element_by_css_selector(value)
                elif by == 'xpath':
                    element = self.driver.find_element_by_xpath(value)
                else:
                    print('没有找到元素')
                return element
            else:
                print('输入的元素定位方式错误')
    
    
        def send(self,selector,value):
            element=self.find_element(selector)#调用封装的定位元素方法
            try:
                element.send_keys(value)
                print('输入的内容%s' % value)
            except BaseException:
                print('error')
    
        def click(self,selector):
            element = self.find_element(selector)
            element.click()
    这是封装的公共方法。封装的元素定位方法需要传一个数组,数组下标第一个是定位方式,第二个是具体的值。元素定位写在封装的元素操作里面,不写在后面页面类里是因为方便在页面类里面重复使用元素。
    from framework.base_page import BasePage
    
    class baidu(BasePage):
        kw = ['id','kw']#定位搜索输入框
        su = ['id','su']#搜索按钮
    
        def kw_send(self,value):#搜索框输入内容
            self.send(self.kw,value)
    
        def su_click(self):#点击搜索按钮
            self.click(self.su)
    这是百度搜索页面的页面类。定位的元素单独拿出来,这样就可以重复使用。然后元素的操作也封装成一个方法。就比如上面这个搜索框输入内容。value这个值在后面测试类的时候,可以根据输入的不同,组装成不同的测试用例。
    from selenium import webdriver
    from pageobject.BaiduPage import baidu
    import unittest
    class BaiduSerch(unittest.TestCase):
    
        def test_baidu(self):
            dr = webdriver.Firefox()
            dr.get('https://www.baidu.com')
            bai = baidu(dr)
            bai.kw_send('selenium')
            bai.su_click()
    
    if __name__ =='__main__':
        unittest.main()

    最后就是测试类的,这里使用了unittest单元测试框架。bai = baidu(dr)每个页面都需要把driver传进去。使用WebDriver有一个要注意的就是 脚本运行的时候要保持只有一个driver。

  • 相关阅读:
    Thinkhphp5控制器调用的Model层的方法总结
    js数组与字符串的相互转换方法
    oop中 限制文件类型和大小
    php常用内置函数
    PHP 面向对象
    微信JSSDK开发
    PHPExcel探索之旅
    php操作Excel
    百度地图和高德地图的API视频教程
    手机号码归属地查询(免费)
  • 原文地址:https://www.cnblogs.com/myal/p/9408822.html
Copyright © 2011-2022 走看看