Selenium+Python3之:多线程进行跨浏览器测试

2023-10-30

1、引言

在WebUI自动化方面的博文, 我也是有好一段时间没有更新了, 这昨晚被小屌丝骚扰了…
为了答应小屌丝的要求(能得到小姐姐的微信),我昨晚是整理了半宿啊,
先还原一下小屌丝诱惑我写博文的对话

小屌丝:小鱼,我用脚指头算了一下,你有半年没更新WebUI相关的博文了,是因为小姐姐吗?
小鱼:我擦~~ 你还能说得再直接点吗?
小屌丝:6月初,小姐姐的照片
小鱼:… 不记得,我不会承认我帮小姐姐破解压缩包的事情。
在这里插入图片描述

小屌丝:能不能偶尔也为我们这些帅哥想一下,
毕竟我们对技术的执着是认真的。
小鱼:赶紧的,想说啥,直接说,这大半夜的,忙着呢…
小屌丝:我想知道 如何使用selenium,进行跨浏览器测试。
小鱼:就这?我忙呢,现在没时间给你讲这个…
小屌丝:刚刚有个小姐姐私信我,问我有没有小鱼的WeChat
小鱼:我这么正直的人, 不要用小姐姐来骗我?
小屌丝:小姐姐还挺漂亮!而且还…
小鱼:我是那种人吗?我看中的是颜值吗? 不可能。
小屌丝:这么坚决?嗯,好吧, 那我就回复小姐姐,不方便提供微信了。
小鱼:…你这样直接拒绝,不礼貌,让小姐姐添加我的微信,我来拒绝她…
小屌丝:那你先给我讲如何多线程跨浏览器操作,
讲明白了,我就让小姐姐加你微信。
小鱼:我不是为了小姐姐,而是看你对技术这么执着,我就勉为其难的给你讲一下吧。

先喝杯美咖,然后默默的打开编译器,开始撸代码…

2、跨浏览器操作及定义

在做测试开发中, Web测试中的兼容性测试是很重要的一个环节,
毕竟市面上浏览器那么多,如果不适用于主流的浏览器,那最后只能是凉凉
在自动化未面世前,我们能做的,就是测试机安装很多种浏览器,不停地切换,已验证同一个功能在不同浏览器或不同浏览器版本,可以正常使用~~这搞到最后,就想骂街!

提到这个事情,小鱼深有体会:
那时还在岛国,两台测试机,安装了ie的各种版本,chrome,Firefox,safai…哎~

所以,为了能让更多测试开发大佬不去体验这种苦逼的操作
,我们就需要进行跨浏览器测试,
那么,接下来,就来看看,啥是跨浏览器测试

2.1 啥是跨浏览器测试

就一句话,很好理解
跨浏览器测试是功能测试的一个分支,用以验证web应用能在不同的浏览器上正常工作。

2.2 为啥要进行跨浏览器测试

因为不同的人,喜好不一样, 就好比,有的妹子喜欢个帅哥,有的妹子喜欢隔壁王老五
所以,我们需要满足不同的人的需求。
毕竟:

我们作业写的好,“家长们”就开心,“家长们”开心了,我们就有零花钱了,我们有零花钱了,就能写好作业…

跨浏览器测试的根源:

  • 在不同浏览器字体大小不匹配;
  • javascrpit的实现不一样;
  • css、html的验证有所区别;
  • 有的浏览器或低版本不支持HTML5;
  • 页面对齐和div大小问题;
  • 图片位置或大小问题;
  • 浏览器和操作系统间的兼容问题;

以上几个方面不仅仅对布局有影响,甚至会导致功能不可用,所以我们需要进行跨浏览器测试。

2.3 跨浏览器测试执行

如果我们使用selenium webdriver,那我们就能够自动的在IE、firefox、chrome、等不同浏览器上运行测试用例。

为了能在同一台机器上不同浏览器上同时执行测试用例,我们需要多线程技术。

下面我们基于python的多线程技术来尝试同时启动多个浏览器进行selenium自动化测试。

话不多说,直接来到第三章节,上代码

3、代码编写实战

编写代码

# -*- coding:utf-8 -*-
# @Time   : 2021-06-16
# @Author : carl_DJ

from selenium import webdriver
from threading import Thread
import sys,time


#直接使用百度搜索进行演示
def test_baidu_search(browser, url):
    driver = None
    # 你可以自定义这里,添加更多浏览器支持进来
    if browser == "ie":
        driver = webdriver.Ie()
    elif browser == "firefox":
        driver = webdriver.Firefox()
    elif browser == "chrome":
        driver = webdriver.Chrome()

    if driver == None:
        exit()
    print(f'开始进行搜索')

    driver.get(url)

    print(f'清空输入框内容,输入关键字进行搜索')
    driver.find_element_by_id("kw").clear()
    driver.find_element_by_id("kw").send_keys(u"carL奕然的博客")

    print(f'点击百度的搜索按钮')

    driver.find_element_by_id("su").click()
    time.sleep(3)

    print(f'关闭并退出浏览器')
    driver.quit()
    
if __name__ == "__main__":
    # 浏览器和首页url
    data = {
        "ie": "http://www.baidu.com",
        "firefox": "http://www.baidu.com",
        "chrome": "http://www.baidu.com"
    }

    # 构建线程
    threads = []
    for b, url in data.items():
        t = Thread(target=test_baidu_search, args=(b, url))
        threads.append(t)

        # 启动所有线程
    for thr in threads:
        thr.start()

运行结果
在这里插入图片描述

写到这里,就完事了,是不是很简单。
我也赶紧的跟小屌丝要小姐姐的微信了。

小鱼:小屌丝,我这讲的还可以吧,要不…小姐姐的…微信…
小屌丝:好的好的, 我这就让小姐姐加你微信。
小鱼:激动的心,颤抖的手,小姐姐的微信不能少。
在这里插入图片描述
小屌丝:不带反悔的。
小鱼:小屌丝…你~ ~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium+Python3之:多线程进行跨浏览器测试 的相关文章

  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • ValueError:请使用“Layer”实例初始化“TimeDistributed”层

    我正在尝试构建一个可以在音频和视频样本上进行训练的模型 但出现此错误ValueError Please initialize TimeDistributed layer with a Layer instance You passed Te
  • 尝试从网页Python和BeautifulSoup获取编码

    我试图从网页检索字符集 这会一直改变 目前我使用 beautifulSoup 来解析页面 然后从标题中提取字符集 这工作正常 直到我遇到一个网站 到目前为止 我的代码以及与其他页面一起使用的代码是 def get encoding soup
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 检查 python 中命令行参数的数量

    我是蟒蛇新手 还是把脚弄湿了 我正在尝试做这样的事情 import sys if len sys argv lt 3 or lt len sys argv gt 3 print This script will compare two fi
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • numpy:高效执行数组的复杂重塑

    我正在将供应商提供的大型二进制数组读入 2D numpy 数组 tempfid M N load data data numpy fromfile file dirname fid dtype numpy dtype i4 convert
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在Python中读取tiff标签

    我正在尝试用 Python 读取 tiff 文件的标签 该文件是 RGB 的uint16每个通道的值 我目前正在使用tifffile import tifffile img tifffile imread file tif 然而 img是一
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • Python 2 的 `exceptions` 模块在 Python3 中丢失了,它的内容到哪里去了?

    一位朋友提到 对于 Python 2 假设您在命令行上的路径环境变量中有它 pydoc exceptions 非常有用 知道它应该可以为他每周节省几分钟的网络查找时间 我自己每周都会用谷歌搜索一次例外层次结构 所以这对我来说也是一个有用的提
  • 基于值而不是类型的单次调度

    我在 Django 上构建 SPA 并且有一个庞大的功能 其中包含许多功能if用于检查我的对象字段的状态名称的语句 像这样 if self state new do some logic if self state archive do s
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed

随机推荐

  • 使用Qt/C++实现WGS84、高德GCJ-02、百度BD-09坐标系间相互转化

    在做地图相关开发时候 绕不开不同坐标系间的转化 因此我根据查阅相关资料后将不同坐标系间的转换封装到一个GeoTranslate类中 该类转换函数不仅支持Qt C 调用 同时可在QML中直接调用 配合上QML Map很方便 我将该类做了个De
  • certificate_unknown 未知证书,后端配置了本地生成的证书,vue访问时ERR_CERT_AUTHORITY_INVALID

    解决办法 将ip接口地址复制到浏览器地址栏访问一下就出现以下界面 点继续访问 之后vue访问就访问的通了 每次浏览器历史数据被清除 都需要重新进行此操作 否则就会被拦截 这个是被浏览器拦截的 主要是证书的问题 不是前端或者后端的问题
  • SPSS学习(1)之数据录入与数据获取

    SPSS系列文章是本人根据张文彤的 SPSS20 0统计分析基础教程第2版 学习SPSS中学习笔记 仅作参考和学习 在SPSS中建立数据文件大致有两种情况 一种是非电子化的原始数据资料 需要直接将调查问卷中的数据录入SPSS软件 建立数据文
  • 【Python】用Python来创建7种不同的文件格式

    今天的这篇文章呢 小编来介绍一下如何通过Python来创建各种形式的文件 这里包括了 文本文件 CSV文件 Excel文件 压缩文件 XML文件 JSON文件 PDF文件 创建文本文件 文本文件本质上是以 txt后缀结尾的文件 在Pytho
  • 自学网络安全(黑客)两个月都没入门?

    最近我经常会看到这一类的问题 学习XXX知识没效果 学习XXX技能没方向 学习XXX没办法入门 给你一个忠告 如果你完全没有基础的话 前期最好不要盲目去找资料学习 因为大部分人把资料收集好之后 基本上都是放在收藏夹吃灰 同时资料收集的多了
  • C51_PID 水温控制系统

    前言 通过C语言程序写入51单片机实现水的温度的采集 并通过控制器控制加热器给水体加热 对水体的温进行PID控制 保证温度在设定值范围内波动 最终包括C51的视频的内容以及部分参考资料都可以在 百度分享链接内下载 链接 https pan
  • STM32中文参考手册下载地址

    STM32中文参考手册下载地址 进入官网后点击 设计资源 选择你要下载的芯片的手册 然后找到有 完整的存储器和外设信息 字眼的文档进行下载 很多人下载的下面这种 这种只介绍电气性能和简单介绍外设资源 并不告诉你寄存器啥的 编程比较困难 vo
  • 电脑键盘指法的正确练习步骤

    电脑键盘指法的正确练习步骤 转载 http www jb51 net softjc 39858 html 如果您觉得不合适请联系QQ 2453419889 我会及时删除本博文 电脑键盘指法练习学习目的 一 正确的指法 二 熟悉字母位置 电脑
  • base64、utf-8、二进制有什么关系?

    一 引言 在开发过程中我们经常会用到GBK utf 8等编码规范 本文为大家介绍了他们的起源 差别以及应用 二 ASCII GBK Unicode Utf 8编码区别 1 文本编码的诞生背景 计算机只能处理数字 如果要处理文本文件就必须先把
  • React Native Map遍历问题

    code for let room of rooms values console log room error TypeError undefined is not a function evaluating iterator typeo
  • 【100%通过率 】【华为OD机试真题c++/java/python】开心消消乐【2022 Q4

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个N行M列的二维矩阵 矩阵中每个位置的数字取值为0或1 矩阵示例如 1100 0001 0011 1111 现需要将矩阵中所有的1进行反转
  • Linux线程学习(三):pthread常见线程函数

    在任何一个时间点上 线程是可结合的 joinable 或者是分离的 detached 一个可结合的线程能够被其他线程收回其资源和杀死 在被其他线程回收之前 它的存储器资源 例如栈 是不释放的 相反 一个分离的线程是不能被其他线程回收或杀死的
  • 如何使用FastReport .NET 从 JetBrains Rider 中创建PDF报告?

    Fastreport是目前世界上主流的图表控件 具有超高性价比 以更具成本优势的价格 便能提供功能齐全的报表解决方案 连续三年蝉联全球文档创建组件和库的 Top 50 Publishers 奖 FastReport NET官方版下载 qun
  • android开发系列:Android Studio项目添加依赖时下载的jar包在哪

    参考 参考 https blog csdn net wudinaniya article details 75258077 结论 c盘 用户 用户名 gradle caches modules 2 files 2 1
  • python模拟登录网站_Python模拟登录的几种方法

    目录 正文 方法一 直接使用已知的cookie访问 特点 简单 但需要先在浏览器登录 原理 简单地说 cookie保存在发起请求的客户端中 服务器利用cookie来区分不同的客户端 因为http是一种无状态的连接 当服务器一下子收到好几个请
  • 【error】Doubbo 服务启动异常:java.lang.RuntimeException: [source error] getPropertyValue,问题分析,解决方案

    目录 1 报错信息 2 原因分析 3 解决方案 4 提示 1 报错信息 java lang RuntimeException source error getPropertyValue Ljava lang Object Ljava lan
  • R语言—向量

    向量 vector R 语言最基本的数据结构是向量 类似于数学上的集合的概念 由一个或多个元素构成 向量其实是用于存储数值型 字符型 或逻辑型数据的一维数组 创建向量 c 函数 gt a lt 1 给a赋值1 gt a 显示a的值 1 1
  • 解密企业级PPPoE:部署、配置和管理的最佳实践

    亲爱的读者朋友们 今天 我将带你一起探索企业级PPPoE 这个让你畅快玩转互联网的神奇协议 首先 让我们来了解一下什么是PPPoE 它代表着 点对点协议以太网 是一种强大而灵活的网络连接协议 对于企业来说 部署PPPoE意味着你可以轻松实现
  • Java实现实现简单算法之最长对称字符串

    题目 已知一字符串 求其内包含的最长对称字符串 例 已知字符串 google 输出最长对称字符串 goog 已知abada 输出aba 已知sdghjdgzzgdah 输出 dgzzgd 看到题目时 大家第一反应都是模棱两可的 好像可以这样
  • Selenium+Python3之:多线程进行跨浏览器测试

    python多线程跨浏览器测试 1 引言 2 跨浏览器操作及定义 2 1 啥是跨浏览器测试 2 2 为啥要进行跨浏览器测试 2 3 跨浏览器测试执行 3 代码编写实战 1 引言 在WebUI自动化方面的博文 我也是有好一段时间没有更新了 这