web自动化测试框架

本文介绍web自动化测试框架 

web自动化测试框架_第1张图片

 ●Base:用来对Selenium API进行二次封装。

对Selenium API进行二次封装的目的是简化一些复杂的操作,但是千万不要为了封装而封装。

封装好后,其他页面类可以集成basepage,调用这些方法。

from selenium.webdriver.support.ui import WebDriverWait
'''
这里我们定义一个名为"Base"的类,对Selenium WebDriver提供的API进行二次封装
'''


class Base(object):
      def __init__(self, driver):
           '''
           调用该类的时候给其传递一个driver
           :param driver:
           '''
           self.driver = driver


      def split_locator(self, locator):
           '''
           分解定位表达式,如"id,kw",拆分后返回定位器"id"和定位器的值"kw"
           :param locator: 定位方法+定位表达式组合字符串,如"id,kw"
           :return: locator_dict[by], value:返回定位方式和定位表达式
           '''
           if len(locator.split(',')) == 3:
                 by = locator.split(',')[0]  # 定位器
                 value = locator.split(',')[1] + ',' + locator.split(',')[2]
           else:
                 by = locator.split(',')[0]  # 定位器
                 value = locator.split(',')[1] # 定位器值
           # 这里是为了方便,所以简写了定位器
           locator_dict = {
                 'id': 'id',
                 'name': 'name',
                 'class': 'class name',
                 'tag': 'tag name',
                 'link': 'link text',
                 'plink': 'partial link text',
                 'xpath': 'xpath',
                 'css': 'css selector',
           }
           if by not in locator_dict.keys():
                 raise NameError("Locator Err!'id',only 'name','class','tag','link','plink', 'xpath','css' can be used.")
           return locator_dict[by], value


      def get_element(self, locator, sec=20):
           """
           获取一个元素
           :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如"id,kw"
           :param sec: 等待秒数
           :return: 如果元素可找到则返回element对象,否则返回False
           """
          by, value = self.split_locator(locator)
           try:
               element = WebDriverWait(self.driver, sec, 1).until(lambda x: x.find_element(by=by, value=value))
               return element
           except Exception as e:
               raise e

      def get_elements(self, locator, sec=20):
           """
           获取一组元素
           :param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如"id,kw"
           :return: elements
           """
           by, value = self.split_locator(locator)
           try:
               elements = WebDriverWait(self.driver, 60, 1).until(lambda x: x.find_elements(by=by, value=value))
               return elements
           except Exception as e:
               raise e

if __name__ == '__main__':
     from selenium import webdriver
     from time import sleep

     driver = webdriver.Chrome()
     driver.get('https://www.baidu.com/')
     a = "id1,kw"
     bp = Base(driver)
     bp.get_element(a).send_keys('11111')
     # bp.get_element("plink,地图").click()
     sleep(2)
     driver.quit()

 

●Common:用来放置一些公共的函数或方法文件,如前面封装的解析YAML文件、解析CSV文件的函数。

●Config:用来放置测试项目中的配置信息文件,如系统的IP地址、端口。

测试配置分离--使用yaml文件写入配置信息,在测试用例中读取配置,需要有对应的解析文件函数。

websites:
  host: localhost:81

web自动化测试框架_第2张图片 

 

●Data:用来放置CSV文件,内容是测试用例参数化用到的数据,也可以放置其他类型的数据文件,如Excel和JSON文件。

测试数据分离---将测试数据放在csv/yaml文件中,在测试用例文件读取测试数据进行参数化传入数据。

●Report:用来放置测试执行的报告。

●Test:用来测试相关文件,其中子目录PageObject用来存放页面对象,子目录TestCase用来放置测试用例。

你可能感兴趣的:(测试框架,python)