测试第三课-------自动化测试相关

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


自动化相关

  • **作者前言**
  • 元素定位方法
    • CSS selector
    • 通过xpath
    • 对测试对象进行操作
      • 点击
      • 模拟输入
      • 清除⽂本内容
      • 获取文本
      • 获取当前⻚⾯标题
      • 获取当前页面的url
      • get_attribute("属性名称")
    • 窗口
      • 窗口的大小
      • 屏幕截图
      • 关闭当前的窗口
    • 弹窗
    • 等待
      • 强制等待
      • 隐式等待
      • 显示等待
    • 浏览器导航
    • 文件上传

元素定位方法

CSS selector

在上一篇的文章中,写了一个简单自动化脚本,这个使用到的元素定位就是这个,需要我们打开浏览器,按下F12进入开发者工具,
如图:
在这里插入图片描述
然后选择其中的一个标签,复制对应的css selector

通过xpath

这里的话也是跟上面的获取方式是一样的,复制对应的xpath来
获取HTML⻚⾯所有的节点
//*
获取HTML⻚⾯指定的节点
//[指定节点]
//ul :获取HTML⻚⾯所有的ul节点
//input:获取HTML⻚⾯所有的input节点
获取⼀个节点中的直接⼦节点
/
//span/input
获取⼀个节点的⽗节点

//input/… 获取input节点的⽗节点
实现节点属性的匹配
[@…]
//*[@id=‘kw’] 匹配HTML⻚⾯中id属性为kw的节点

对测试对象进行操作

点击

click()

在这里插入图片描述

模拟输入

send_keys("")

在这里插入图片描述

清除⽂本内容

clear()

在这里插入图片描述

获取文本

text

在这里插入图片描述

获取当前⻚⾯标题

title

在这里插入图片描述

获取当前页面的url

current_url

在这里插入图片描述

get_attribute(“属性名称”)

获取标签的属性值

窗口

在测试的过程中,不仅仅是单独在一个页面进行测试,也有可能页面跳转进行测试,当页面跳转的时候,就需要我们切换窗口了。
方法如下:
获取当前的窗口句柄

driver.current_window_handle

获取全部窗口的句柄

driver.window_handles

切换窗口句柄

driver.switch_to.window(某个句柄)

窗口的大小

# 设置窗口的大小
chromeDriver.maximize_window()# 最大化
time.sleep(3)
chromeDriver.minimize_window()# 最小化
time.sleep(3)
chromeDriver.set_window_size(200,200)# 设置窗口的大小
time.sleep(3)
chromeDriver.fullscreen_window()# 全屏相当于快捷键f11

屏幕截图

driver.save_screenshot('../images/image.png')# 参数是保存图片的名称

虽然截图好用,但是保存的路径却是一个疼伤,文件名必须不一样,这就让我们想到是否可以使用时间来进行命名,时间每一秒都是不一样的,我们可以借助本地时间来进行命名
这里就需要使用到datetime模块中的now对象,

datetime.now()# 创建一个当前时间的对象

如图:
在这里插入图片描述
输出的样式不符合文件的命名规则,我们还需要使用到里面的now类方式

datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')

可以把格式转换成对应的格式

关闭当前的窗口

driver.close()

如果涉及到窗口的切换,还需要进行一定要进行窗口句柄的切换。否则会报错

弹窗

弹窗是在⻚⾯是找不到任何元素的,这种情况怎么处理?使⽤selenium提供的Alert接⼝
弹窗一般分为警告弹窗,提示弹窗以及确认弹窗。
警告弹窗:
在这里插入图片描述

确认弹窗:
在这里插入图片描述

提示弹窗:

在这里插入图片描述
要对弹窗进行操作,就要先定位到弹窗**,注意:必须触发弹窗**

alert = driver.switchTo.alert # 定位到弹窗

这里和切换到句柄不是一个样子,接下来我们可以对弹窗进行点击或者输入内容,

#确认
alert.accept()
#取消
alert.dismiss()
#输入内容
alert.send_keys("hello")

等待

强制等待

等待分为强制等待和隐式等待以及显示等待
其中强制等待虽然使用起来简单,但是效率低,等待够时间才能运行后面的代码
代码如下:

time.sleep(5)

不建议写

隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执⾏,直到超时没找到元素才会报错。

driver.implicitly_wait(5)

隐式等待的话,在规定时间内找到对应的元素就会执行后面的代码,这在某些情况下,节约了很多不必要的时间浪费。
隐式等待作⽤域是整个脚本的所有元素。即只要driver对象没有被释放掉( driver.quit() ),隐
式等待就⼀直⽣效。

显示等待

相对于隐式等待针对的是全局,显示等待的话,作用于局部

WebDriverWait(driver,sec).until(functions)

导入必要的模块:
你需要导入 WebDriverWait 和 expected_conditions 模块。

创建 WebDriverWait 对象:
设定最大等待时间和要等待的条件。

使用等待条件(funtion):
例如,等待元素可见、可点击等
涉及到selenium.support.ui.ExpectedConditions包下的 ExpectedConditions类
ExpectedConditions方法
进行判断该元素是否存在等,不存在就会报错
导入模块

from selenium.webdriver.support import expected_conditions

在这里插入图片描述
使用显示等待的好处:
能解决隐式等待无法解决的问题,例如等待弹窗,弹窗在页面中无法找到,隐式等待就会失效,

# 点击百度一下
chromeDriver.find_element(By.ID,"su").click()
# 显示等待,并判断元素是否存在
WebDriverWait(chromeDriver,10).until(expected_conditions.invisibility_of_element((By.CSS_SELECTOR,r"#\31  > div > div.cosc-card > div > div > h3 > a")))
time.sleep(3)
chromeDriver.find_element(By.CSS_SELECTOR,r"#\31  > div > div.cosc-card > div > div > h3 > a").click()

如图:
在这里插入图片描述

注意:
显示等待和隐式等待不能混用,但是强制等待可以

浏览器导航

打开⽹站

driver.get("https://tool.lu/")

浏览器的前进、后退、刷新

driver.back()
driver.forward()
driver.refresh()

如图:
在这里插入图片描述

文件上传

点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素,但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的

driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%A
F%95/selenium4html/selenium-html/upload.html")
ele = driver.find_element(By.CSS_SELECTOR,"body > div > div >
input[type=file]")
ele.send_keys("D:\\file\\test.txt")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/78940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive null safe的用法

总结: null safe 是用<> 代表比较&#xff0c;而不是用 。null <> null 返回 true&#xff0c; 而 null null 代表 false。 NULL 和任意字符比较都返回 NULL&#xff0c;而不是 true 或者 false。如 SELECT 1 1, NULL NULL, 1 NULL;输出 true NULL NULL如果我…

LINUX基础 [四] - Linux工具

目录 软件包管理器yum Linux开发工具vim vim的基本概念 vim的三种常用模式 vim的简单配置 vim常用模式的基本操作 命令模式 底行模式 处理vim打开文件报错的问题 Linux编译器-gcc/g使用 为什么我们可以用C/C做开发呢&#xff1f; 预处理&#xff08;进行宏替换&#x…

RocketMQ 03

今天是2025/04/14 21:58 day 20 总路线请移步主页Java大纲相关文章 今天进行RocketMQ 6,7,8 个模块的归纳 最近在忙毕设&#xff0c;更新有点慢&#xff0c;见谅 首先是RocketMQ 的相关内容概括的思维导图 6. 安全机制 6.1 ACL 访问控制 核心功能 权限分级&#xff1a;通过…

深入理解浏览器的 Cookie:全面解析与实践指南

在现代 Web 开发中&#xff0c;Cookie 扮演着举足轻重的角色。它不仅用于管理用户会话、记录用户偏好&#xff0c;还在行为追踪、广告投放以及安全防护等诸多方面发挥着重要作用。随着互联网应用场景的不断丰富&#xff0c;Cookie 的使用和管理也日趋复杂&#xff0c;如何在保障…

在企业级部署中如何优化NVIDIA GPU和容器环境配置:最佳实践与常见误区20250414

在企业级部署中如何优化NVIDIA GPU和容器环境配置&#xff1a;最佳实践与常见误区 引言 随着AI和深度学习技术的迅速发展&#xff0c;企业对GPU加速计算的需求愈加迫切。在此过程中&#xff0c;如何高效地配置宿主机与容器化环境&#xff0c;特别是利用NVIDIA GPU和相关工具&…

【秣厉科技】LabVIEW工具包——OpenCV 教程(19):拾遗 - imgproc 基础操作(上)

文章目录 前言imgproc 基础操作&#xff08;上&#xff09;1. 颜色空间2. 直方图3. 二值化4. 腐蚀、膨胀、开闭运算5. 梯度与轮廓6. 简易绘图7. 重映射 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#x…

Linux 下 Module 工具的介绍与使用

参考&#xff1a; https://www.fasteda.cn/post/22.html https://modules.readthedocs.io/en/latest/module.html Linux 下 Module 工具的介绍与使用 一、前言 在 Linux 中&#xff0c;当同一款编辑器、运行库、软件存在多个版本且多个版本都需要在不同的场景或人员使用时&a…

空间信息可视化——WebGIS前端实例(一)

技术栈&#xff1a;原生HTML 源代码&#xff1a;CUGLin/WebGIS: This is a project of Spatial information visualization 4 全国贫困县可视化系统 4.1 系统设计思想 党的十九大报告明确指出,要“确保到2020年我国现行标准下农村贫困人口实现脱贫,贫困县全部摘帽,解决区域…

单双线程的理解 和 lua基础语法

1.什么是单进程 &#xff0c;什么是多进程 当一个程序开始运行时&#xff0c;它就是一个进程&#xff0c;进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由单个或多个线程所组成的。 1.1 像apache nginx 这类 服务器中间件就是多进程的软件 &#xff0…

【Linux】VIM 编辑器,编辑加速引擎

目录 vim中的五种常见模式介绍VIM的基本操作安装VIMVIM中的模式切换 VIM指令集命令模式指令集底行模式指令集视图模式指令集替换和插入模式 end vim中的五种常见模式介绍 正常/普通/命令模式【Normal mode】 控制屏幕光标的移动&#xff0c;字符、字或行的删除&#xff0c;移动…

【Linux网络】Socket 编程TCP

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…

记一次 .NET某固高运动卡测试 卡慢分析

一&#xff1a;背景 1. 讲故事 年前有位朋友找到我&#xff0c;说他们的程序会偶发性卡慢 10s 钟&#xff0c;在某些组合下会正常&#xff0c;某些组合下就会出现问题&#xff0c;解释不了其中的原因&#xff0c;让我帮忙看下怎么回事&#xff1f;截图如下&#xff1a; priva…

硬件知识积累 单片机+ 光耦 + 继电器需要注意的地方

1. 电路图 与其数值描述 1.1 单片机引脚信号为 OPtoCoupler_control_4 PC817SB 为 光耦 继电器 SRD-05VDC-SL-A 的线圈电压为 67Ω。 2. 需注意的地方 1. 单片机的推挽输出的电流最大为 25mA 2. 注意光耦的 CTR 参数 3. 注意继电器线圈的 内阻 4. 继电器的开启电压。 因为光耦…

IP组播技术与internet

1.MAC地址分为三类&#xff1a;广播地址&#xff1b;组播地址&#xff1b;单播地址 2.由一个源向一组主机发送信息的传输方式称为组播。 3.组播MAC地址&#xff0c;第一个字节的最后一位为1&#xff1b; 单播MAC地址&#xff0c;第一个字节的最后一位为0&#xff1b; 4.不能…

vue3+vite+ts使用daisyui/tailwindcss

vite创建vue3脚手架 npm init vitelatest myVue3 – --template vue cd .\myVue3\ npm i npm run dev 安装tailwindcss/daisyui 依赖安装 npm install -D tailwindcss postcss autoprefixer daisyui npx tailwindcss init -p 这条命令将生成postcss.config.js(因为加了…

大数据(7)Kafka核心原理揭秘:从入门到企业级实战应用

目录 一、大数据时代的技术革命1.1 消息中间件演进史1.2 Kafka核心设计哲学 二、架构深度解构2.1 核心组件拓扑2.1.1 副本同步机制&#xff08;ISR&#xff09; 2.2 生产者黑科技2.3 消费者演进路线 三、企业级应用实战3.1 金融行业实时风控3.2 物联网数据管道 四、生产环境优化…

spring boot大文件与多文件下载

一、简单大文件下载&#xff1a; /*** 下载大文件* param path 路径* param fileName 文件名* return* throws IOException*/ public static ResponseEntity<InputStreamResource> downloadFile(String path, String fileName) throws IOException {Path filePath Path…

第二节:React 基础篇-受控组件 vs 非受控组件

一、场景题&#xff1a;设计一个实时搜索输入框&#xff0c;说明选择依据 受控组件 vs 非受控组件 核心区别 特征受控组件非受控组件数据管理由React状态&#xff08;state&#xff09;控制通过DOM元素&#xff08;ref&#xff09;直接访问更新时机每次输入触发onChange提交…

局部路由守卫

局部路由守卫为我们提供了更细粒度的路由控制&#xff0c;允许我们在特定的路由或组件级别添加鉴权和逻辑处理。局部路由守卫分为 path 守卫和 component 守卫&#xff0c;它们分别适用于不同的场景。 path 守卫&#xff08;路由守卫&#xff09; path 守卫用于在进入特定路由…

Android 16应用适配指南

Android 16版本特性介绍 https://developer.android.com/about/versions/16?hlzh-cn Android 16 所有功能和 API 概览 https://developer.android.com/about/versions/16/features?hlzh-cn#language-switching Android 16 发布时间 Android 16 适配指南 Google开发平台&…