Python语言web自动化通用脚本

web自动化脚本中有一部分代码是可以借鉴的,我们只需要将这个框架移植到当前项目中,修改部分参数即可。比如日志类、driver对象、元素基本操作等。

以商城项目为例,以下就是相关代码。

base包(内含日志、driver对象、页面元素操作):

页面元素操作(base.py):

import timefrom time import sleep

import pagefrom selenium.webdriver.support.wait import WebDriverWaitfrom base.get_logger import GetLogger

# 获取log日志器log = GetLogger().get_logger()

class Base:

    def __init__(self, driver):        log.info("[base]: 正在获取初始化driver对象:{}".format(driver))        self.driver = driver

    # 查找元素方法 封装    def base_find(self, loc,  timeout=30, poll=0.5):        log.info("[base]: 正在定位:{} 元素,默认定位超时时间为: {}".format(loc, timeout))        # 使用显示等待 查找元素        return WebDriverWait(self.driver,                             timeout=timeout,                             poll_frequency=poll).until(lambda x:x.find_element(*loc))

    # 点击元素 方法封装    def base_click(self, loc):        log.info("[base]: 正在对:{} 元素实行点击事件".format(loc))        self.base_find(loc).click()

    # 输入元素 方法封装    def base_input(self, loc, value):        # 获取元素        el = self.base_find(loc)        # 清空        log.info("[base]: 正在对:{} 元素实行清空".format(loc))        el.clear()        # 输入        el.send_keys(value)

    # 获取文本信息 方法封装    def base_get_text(self, loc):        log.info("[base]: 正在获取:{} 元素文本值".format(loc))        return self.base_find(loc).text

    # 截图 方法封装    def base_get_image(self):        log.info("[base]: 断言出错,调用截图")        self.driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))

    # 判断元素是否存在 方法封装    def base_element_is_exist(self, loc):        try:            self.base_find(loc, timeout=2)            log.info("[base]: {} 元素查找成功,存在页面".format(loc))            return True # 代表元素存在        except:            log.info("[base]: {} 元素查找失败,不存在当前页面".format(loc))            return False # 代表元素不存在

    # 回到首(页购物车、下订单、支付)都需要用到此方法    def base_index(self):        sleep(2)        self.driver.get(page.URL)

    # 切换frame表单方法    def base_switch_frame(self, name):        self.driver.switch_to.frame(name)

    # 回到默认目录方法    def base_default_content(self):        self.driver.switch_to.default_content()

    # 切换窗口 方法 调用此方法    def base_switch_to_window(self, title):        log.info("正在执行切换title值为:{}窗口 ".format(title))        self.driver.switch_to.window(self.base_get_title_handle(title))

    # 获取指定title页面的handle方法    def base_get_title_handle(self, title):        # 获取当前页面所有的handles        for handle in self.driver.window_handles:            log.info("正在遍历handles:{}-->{}".format(handle, self.driver.window_handles))            # 切换 handle            self.driver.switch_to.window(handle)            log.info("切换 :{} 窗口".format(handle))            # 获取当前页面title 并判断 是否等于 指定参数title            log.info("判断当前页面title:{} 是否等于指定的title:{}".format(self.driver.title, title))            if self.driver.title == title:                log.info("条件成立! 返回当前handle{}".format(handle))                # 返回 handle                return handle

driver对象(get_driver.py):
from selenium import webdriverimport page

class GetDriver:    driver = None

    # 获取 driver    @classmethod    def get_driver(cls):        if cls.driver is None:            # 获取driver            cls.driver = webdriver.Firefox()            # 最大化浏览器            cls.driver.maximize_window()            # 打开url            cls.driver.get(page.URL)        # 返回 driver        return cls.driver

    # 关闭driver    @classmethod    def quit_driver(cls):        if cls.driver:            cls.driver.quit()            # 必须置空操作            cls.driver = None

if __name__ == ‘__main__‘:    GetDriver().quit_driver()

日志对象(get_logger.py):
import logging.handlers

class GetLogger:

    logger = None    # 在最外侧运行    # filename = "./log/xxxx.log"    # 获取 logger    @classmethod    def get_logger(cls):        # 如果 logger为空        if cls.logger is None:            # 获取日志器            cls.logger = logging.getLogger()            # 设置日志器默认级别            cls.logger.setLevel(logging.INFO)            # 获取处理器 控制台            sh = logging.StreamHandler()            # 获取处理 文件(时间)            th = logging.handlers.TimedRotatingFileHandler(filename="../log/xxxx.log",                                                           when="midnight",                                                           interval=1,                                                           backupCount=30,                                                           encoding="utf-8")            # 获取格式器            fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"            fmt = logging.Formatter(fm)            # 将格式器 设置 处理器中            sh.setFormatter(fmt)            th.setFormatter(fmt)            # 将处理器 添加到 日志器中            cls.logger.addHandler(sh)            cls.logger.addHandler(th)        # 返回 日志器        return cls.logger

定义测试套件(run_main.py直接放在项目目录下):
# 导包import unittestimport timefrom tool.HTMLTestRunner import HTMLTestRunner

# 定义测试套件 在scripts中 运行# suite = unittest.defaultTestLoader.discover("./")# 在最外侧运行suite = unittest.defaultTestLoader.discover("./scripts")# 报告生成目录及文件名称dir_path = "./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))# 获取文件流并调用run运行with open(dir_path, "wb") as f:    HTMLTestRunner(stream=f, title="Tpshop商城自动化测试报告", description="操作系统:win7").run(suite)

在工具包(tools)中存放HTMLTestRunner.py文件

以上就是Python语言web自动化脚本常用的代码,按需使用。

原文地址:https://www.cnblogs.com/ray-mr-huang/p/11526426.html

时间: 2024-07-31 20:46:23

Python语言web自动化通用脚本的相关文章

Python学习笔记(1)--python语言Web开发框架web2py

Python基础 python语言Web开发框架web2py 创建工程: 工程名设为MyWeb 创建完成后运行得到: 处理静态文件 放在static目录下, 在地址栏中直接通过文件路径访问: 控制器: 在controllers下添加文件. 访问:http://127.0.0.1:8000/main/hello/hello 极客学院:http://www.jikexueyuan.com/course/201.html

基于Python的Web自动化(Selenium)之第一个查询脚本

之前已经将Web自动化的环境已经搭建好了,现在就需要进行开始进行脚本的编写了.首先放上一段比较简单的脚本,如下: #coding = utf-8 from selenium import webdriver import time try:     driver = webdriver.Chrome()     # driver = webdriver.Firefox()     driver.maximize_window()     # driver.set_window_size(1200

sklearn:Python语言开发的通用机器学习库

引言:深入理解机器学习并完全看懂sklearn文档,需要较深厚的理论基础.但是,要将sklearn应用于实际的项目中,只需要对机器学习理论有一个基本的掌握,就可以直接调用其API来完成各种机器学习问题.本文选自<全栈数据之门>,将向你介绍通过三个步骤来解决具体的机器学习问题. sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大量详尽的文档和示例.其文

Python语言Web开发框架web2py

python开发的强大的网络框架web2py,这个框架需要下载和集成. http://www.web2py.com/examples/static/web2py_src.zip

python+paramiko库+svn写的自动化部署脚本

第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一个脚本实现自动化部署,正巧最近在学习python,就用python写一个自动化得脚本吧. 1.首先是环境:SVN的版本控制,windows的本地,linux服务器. 2.思路:应用python,代入cmd脚本,加上强大的python库来做这件事. 3.再详细的思路: 第一步:利用SVN的cmd下得脚

python语言概述

python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 学习编程语言有一个惯例,即运行最简单的Hello程序,该程序功能是在屏幕上打印输出"Hello World".程序虽小,但却是初学者接触编程语言的第一步.使用python语言编写Hello程序只有一行代码,如下; print ("Hello World") python

Python语言的特点及自学建议

Python语言的特点Python语言是一种被广泛使用的高级通用脚本编程语言,具有很多区别于其他语言的特点,这里仅列出如下一些重要特点.(1)语法简洁:实现相同功能,Python语言的代码行数仅相当于其他语言的1/10~1/5.(2)与平台无关:作为脚本语言,Python程序可以在任何安装解释器的计算机环境中执行,因此,用该语言编写的程序可以不经修改地实现跨平台运行.(3)粘性扩展:Python语言具有优异的扩展性,体现在它可以集成C.C++.Java等语言编写的代码,通过接口和函数库等方式将它

WEB自动化(Python+selenium)的API

在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                                                                                                     WEB自动化测试培训2 课程目的 一.Webdriver API 的使用 课程内容 1    控制浏览器 Selenium 主要提供的是操作页面上各

Web2py是一个用Python语言编写的免费的开源Web框架

Zope 2是一款基于Python的Web应用框架,是所有Python Web应用程序.工具的鼻祖,是Python家族一个强有力的分支.Zope 2的"对象发布"系统非常适合面向对象开发方法,并且可以减轻开发者的学习曲线,还可以帮助你发现应用程序里一些不好的功能. Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速.可扩展.安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议. Web2py提供一站式的解决方案,整个开发过程都可