当前位置: 首页 > news >正文

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

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者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")

相关文章:

  • 第十九讲 XGBoost 二分类模型案例(遥感数据识别玉米与小麦地块)
  • HTML:网页的骨架 — 入门详解教程
  • Python heapq模块
  • 【Pandas】pandas DataFrame items
  • AIGC工具平台-建筑平面图3D渲染
  • Android studio Unknown Kotlin JVM target: 21
  • macOS 上使用 Homebrew 安装和配置 frp 客户端
  • 【C++】——lambda表达式
  • 数据资产保护与数据知识产权保护有何不同?
  • JavaScript中的Transferable对象教程
  • 企业级硬盘的测试流程
  • L2TP实验(无图后补)
  • 老旧测试用例生成平台异步任务与用户通知优化
  • OOM问题排查和解决
  • Java工厂模式解析:灵活对象创建的实践指南
  • Java LinkedList深度解析:双向链表的实现艺术与实战指南
  • 【Python爬虫】简单介绍
  • 16bit转8bit的常见方法(图像归一化)
  • 深入理解浏览器的 Cookie:全面解析与实践指南
  • UNITY 屏幕UI自适应
  • 一夜跌去200美元,黄金巨震冲上热搜!涨势已近尾声?
  • 裁员15%、撤销132个机构,美国务院将全面重组
  • 同比增长1.2倍!一季度货物贸易项下跨境资金净流入2063亿美元
  • 去年净流入人口达45万,居各省份第一:浙江带来哪些启示?
  • 大理杨徐邱上诉案开庭:当事人称曾接受过两次测谎测试
  • 普京签署有关批准俄罗斯与伊朗全面战略伙伴关系条约的联邦法令