Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装

这篇具有很好参考价值的文章主要介绍了Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在做Web自动化时,网页截图是常用的操作。像一般的自动化框架与工具都会有截图机制,比如:

1、元素等待失败触发截图 2、元素操作失败触发截图 3、检查点失败触发截图 4、主动要求的触发截图

四种场景,均可触发网页截图操作,将截图保存到对应某个路径下面。
那么Web网页截图怎么编写、上面几种场景如何封装、看完本文就懂了。

一、WEB截图使用讲解

1、文件路径

新建一个screenshotDemo目录,在其下新建一个保存文件的的目录screenpics
Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装
也添加上谷歌驱动chromedriver.exe与demo.py代码文件
在demo.py里编写代码,找出目录

import os
# 拼接screenpics目录的绝对路径
base_path = os.path.dirname(__file__)
pics_path = os.path.join(base_path, 'screenpics')

print(pics_path)

运行代码打印截图文件目录
目录拼接成这样:E:/HunWei/demo/screenshotDemo\screenpics
无需管斜杠与反斜杠同时存在一个路径字符串,它能保存图片就是硬道理

Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装

2、访问网站截图

打开http://schotest.hunwei.top/登录页面,截图

截图方法webdriver.get_screenshot_as_file(path)

import os
from datetime import datetime
from selenium import webdriver
# 拼接screenpics目录的绝对路径
base_path = os.path.dirname(__file__)
pics_path = os.path.join(base_path, 'screenpics')

# 打开浏览器进入网站
webdr = webdriver.Chrome()   #Chrome没有带路径参数需要将chromedriver.exe跟本文件放在同一个目录下面
webdr.get(url='http://schotest.hunwei.top/')
# 获取时间戳与.png合成图片文件名
file_name = str(int(datetime.now().timestamp()*1000)) + '.png'
# 拼路径与文件名称
pic_path = os.path.join(pics_path, file_name)
# 截图并保存文件
webdr.get_screenshot_as_file(pic_path)

详细内容请见注释
运行,自动化打开浏览器,进入网站登录页面,自动保存图片
Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装
双击可查看图片
Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装

二、WEB截图代码封装

1、参数设计

浏览器对象 opr:接收webdriver.Chrome对象,必填

2、函数编写

web截图在自动化框架会有N多地方使用,所以它是必须封装的代码之一
封装的内容有

路径生成 截图保存 返回截图路径信息

代码如下

import os
from datetime import datetime
from selenium import webdriver


base_path = os.path.dirname(__file__)
pics_path = os.path.join(base_path, 'screenpics')


def creenpics_write(opr:webdriver.Chrome):
    '''
    截图保存并返回保存信息
    :param driver: 谷歌浏览器对象
    :return str: 截图描述
    '''
    time_stamp = str(int(datetime.now().timestamp()*1000))
    picfile_path = os.path.join(pics_path, time_stamp + '.png')
    opr.get_screenshot_as_file(picfile_path)
    return '截图保存路径:[{}]'.format(picfile_path)

3、调用函数运行

webdr = webdriver.Chrome()   #Chrome没有带路径参数需要将chromedriver.exe跟本文件放在同一个目录下面
webdr.get(url='http://schotest.hunwei.top/')
# 调用函数运行
creenpics_write(webdr)

运行后,截图保存如下
Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装

3、自动化框架中截图触发时机

触发时机:

1、元素等待失败触发截图 2、元素操作失败触发截图 3、检查点失败触发截图 4、主动要求的触发截图

框架如何初步封装可以看这两篇文章
https://blog.csdn.net/weixin_40331132/article/details/124637868
https://blog.csdn.net/weixin_40331132/article/details/127398064

这里封装等待失败,操作失败的截图,检查点与主动触发,天马行空、旁类触通,自行去做
在每一个操作失败的 try … except…里面添加截图操作,打印出截图内容
在screenshotDemo目录下新增demo01.py
封装代码如下,可细细品读其中逻辑与意义

import os
import time
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.remote.webelement import WebElement

base_path = os.path.dirname(__file__)
pics_path = os.path.join(base_path, 'screenpics')

'''
定位类型字典设计
手撸框架可以节省很多if...else...代码
'''
LOCATION_TYPE = {
    'id': By.ID,
    'name': By.NAME,
    'class': By.CLASS_NAME,
    'tag': By.TAG_NAME,
    'link': By.LINK_TEXT,
    'plink': By.PARTIAL_LINK_TEXT,
    'xpath': By.XPATH,
    'css': By.CSS_SELECTOR
}

def creenpics_write(opr:webdriver.Chrome):
    '''
    截图保存并返回保存信息
    :param driver: 谷歌浏览器对象
    :return str: 截图描述
    '''
    time_stamp = str(int(datetime.now().timestamp()*1000))
    picfile_path = os.path.join(pics_path, time_stamp + '.png')
    opr.get_screenshot_as_file(picfile_path)
    return '截图保存路径:[{}]'.format(picfile_path)


def open_url(url):
    '''
    打开浏览顺访问url,并返回浏器操作句柄
    :param url: 要测试的网站url
    :return: webdriver对像
    '''
    opr = webdriver.Chrome()
    opr.get(url)
    return opr





def get_element(opr:webdriver.Chrome, type, locatuion, index):
    '''
    获取元素并返回
    :param opr: 浏览器句柄
    :param type: 定位器类型
    :param locatuion: 定位器
    :param index: 下标
    :return: 元素对象
    '''
    try:
	    return opr.find_elements(LOCATION_TYPE[str.lower(type)], locatuion)[index]
    except Exception as e:
	    result = creenpics_write(opr)
	    return '获取元素[{}]=[{}]失败,原因:[{}],截图信息:[{}]'.format(type, locatuion, str(type), result)

def element_opr(el:webdriver.Chrome.find_element, operation, value):
    '''
    元素操作
    :param el: 元素对象
    :param operation: 操作类型
    :param value: 值
    :return: 成功(True)or失败(False)
    '''
    if operation == '点击':
        el.click()
        return True
    elif operation == '输入':
        el.send_keys(value)
        return True


def waiting_for_element(wait_type, secs=3, type=None, location=None, opr:webdriver.Chrome=None):
    if wait_type == '等待':
        time.sleep(secs)
        return True, '【等待】成功'
    elif wait_type == '隐性等待':
        opr.implicitly_wait(secs)
        return True, '【隐性等待】成功'
    elif wait_type == '显性等待':
        if type is None or location is None or opr is None:
            return False, '【显性等待】请填写所有参数'
        try:
            WebDriverWait(opr, secs, 0.5).until(EC.visibility_of_element_located((LOCATION_TYPE[str.lower(type)],location)))
        except TimeoutException as e:
	        result = creenpics_write(opr)
	        return False, '【显性等待】{}秒超时,元素[{}]=[{}]没有出现,请看截图信息[{}]'.format(str(secs), type, location, result)
        except Exception as e:
            return False, '【显性等待】传参有误,请检查参数'



def web_autotest_opr(opr:webdriver.Chrome ,operation, type, locatuion, index=0, value=''):
    '''
    元素操作统一入口
    :param opr: 浏览器句柄
    :param operation: 操作类型
    :param type: 定位器类型
    :param locatuion: 定位器
    :param index: 下标
    :param value: 值
    :return: 成功(True)or失败(False)
    '''
    if str.lower(type) != 'js':
        el = get_element(opr, type, locatuion, index)
        if isinstance(el, WebElement):      # 判断返回el是不是元素,如果不是,便打印出结果,如果是,便执行操作
            result = element_opr(el, operation, value)
            print(result)
        else:
            result = el
            print(result)
    else:
        result = opr.execute_script(locatuion)
    return result


'''
执行代码段
'''
webdr = webdriver.Chrome()   #Chrome没有带路径参数需要将chromedriver.exe跟本文件放在同一个目录下面
webdr.get(url='http://schotest.hunwei.top/')
web_autotest_opr(webdr, '输入', 'name', 'username')
web_autotest_opr(webdr, '输入', 'name', 'psw')    #这个故意不存在,触发失败,所以得执行截图

运行结果
Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装

案例代码下载链接 https://download.csdn.net/download/weixin_40331132/86880575

本文结束,Web自动化中截图保证结果有图有真相,快速定位问题所在。希望大家多多点赞与关注文章来源地址https://www.toymoban.com/news/detail-481774.html

到了这里,关于Selenium4.0 + Python手撸自动化框架系列之 Web截图 与 封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Selenium4.3.0(新语法) web自动化测试工具

    1 介绍 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等 这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够

    2024年01月24日
    浏览(33)
  • 自动化测试之八大元素定位方式(python3.10+selenium4)

    元素的定位是自动化测试核心。要操作一个对象,首先要识别定位或找到这个对象。为了实现网页整体布局,我们先要知道,一个元素,是如何定位到页面上的某个位置的,这就是元素定位。 系统环境 Windows 11 📌 python3.10.5 🔖 selenium 4.8.0 🚩 注意:以下每种定位方式均有一

    2024年02月03日
    浏览(40)
  • 浏览器常用基本操作之python3+selenium4自动化测试(基础篇)

    1、打开指定的网页地址 我们使用selenium进行自动化测试时,打开浏览器之后,第一步就是让浏览器访问我们指定的地址,可使用get方法实现 1 2 3 from selenium import webdriver driver = webdriver.Edge() driver.get( \\\'https://www.baidu.com/\\\' )   # 本行用于访问指定的地址 2、获取当前页面url 我们在

    2024年02月01日
    浏览(46)
  • selenium4 自动化测试--环境安装和基础操作

    最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的代码,发现有些东西没有,有些方法又不相同,导致脚本不能运行

    2024年01月21日
    浏览(33)
  • 【自动化测试】基于Selenium + Python的web自动化框架

    Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid:  1、Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,p

    2024年02月07日
    浏览(46)
  • Python + selenium 自动化测试框架

    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的代码的,定位元素的代码等等 2.功能层(页面层) 功

    2023年04月13日
    浏览(30)
  • Python + selenium 自动化测试框架详解

    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的代码的,定位元素的代码等等 2.功能层(页面层) 功

    2024年02月03日
    浏览(28)
  • python+selenium封装UI自动化框架

    seleinum框架 框架的思想: 解决我们测试过程中的问题:大量的重复步骤,用自动化来实现 1)配置和程序的分离 2)测试数据和程序的分离 3)不懂编程的人员可以方便使用:使用的时候不需要写程序 4)有日志功能,实现无人值守 5)自动发报告 6)框架中不要有重复的代码,

    2024年02月09日
    浏览(43)
  • python基于Selenium的web自动化框架

    1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例

    2024年02月02日
    浏览(39)
  • Python Selenium搭建UI自动化测试框架

    自动化测试是软件测试中非常重要的一部分,可以提高测试效率和测试覆盖率。在UI自动化测试中,Selenium是非常流行的工具。本文将介绍如何使用Python和Selenium搭建UI自动化测试框架。 在开始搭建UI自动化测试框架之前,需要先安装Python和Selenium。可以从Python官网下载Python安装

    2023年04月27日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包