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

web自动化测试常见函数

本节重点:

  • 元素定位
  • 操作测试对象 
  • 窗⼝
  • 弹窗
  • 等待
  • 浏览器导航
  • ⽂件上传
  • 浏览器参数

1. 元素的定位

web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。 常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector

常⽤的主要由cssSelector和xpat

1.1 cssSelector

选择器的功能:选中⻚⾯中指定的标签元素

选择器的种类分为基础选择器和复合选择器,常⻅的元素定位⽅式可以通过id选择器和⼦类选择器来进⾏定位。

定位百度⾸⻚的“百度热搜”元素,可以使⽤通过id选择器和⼦类选择器进⾏定位:#hotsearch-content-wrapper

"搜索输⼊框元素":#kw

"百度⼀下按钮":#su

1.2  xpath

XML路径语⾔,不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点。 xpath使⽤路径表达式来选择xml⽂档中的节点.

xpath语法中:

1.2.1 获取HTML⻚⾯所有的节点
//*


1.2.2 获取HTML⻚⾯指定的节点

//[指定节点]

//ul :获取HTML⻚⾯所有的ul节点

//input:获取HTML⻚⾯所有的input节点


1.2.3 获取⼀个节点中的直接⼦节点
/

//span/input


1.2.4 获取⼀个节点的⽗节点

..

//input/.. 获取input节点的⽗节点


1.2.5 实现节点属性的匹配

[@...]

//*[@id='kw'] 匹配HTML⻚⾯中id属性为kw的节点


1.2.6 使⽤指定索引的⽅式获取对应的节点内容

注意:xpath的索引是从1开始的。

百度⾸⻚通过://div/ul/li[3] 定位到第三个百度热搜标签


更便捷的⽣成selector/xpath的⽅式:右键选择复制"Copy selector/xpath"

注意:元素的定位⽅法必须唯⼀。

案例:百度⾸⻚(需要登陆百度账号)右侧的热搜,复制li标签下的a标签,复制好的的selector为:#hotsearch-content-wrapper > li:nth-child(1),xpath为://*[@id="hotsearch-content-wrapper"]/li[1]


2. 操作测试对象

获取到了⻚⾯的元素之后,接下来就是要对元素进⾏操作了。常⻅的操作有点击、提交、输⼊、清除、获取⽂本。

2.1 点击/提交对象

click()
 

找到"百度一下"按钮并点击:

#点击对象
#查找元素 + 点击元素
driver.find_element(By.CSS_SELECTOR, "#su").click()

2.2 模拟按键输⼊


send_keys(" ")

# #模拟按键输入send_keys()
# #查找元素 + 输入文本
# driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("xiaomi")

2.3 清除⽂本内容

输⼊⽂本后⼜想换⼀个新的关键词,这⾥就需要⽤到 clear( )

#清楚文本内容
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("哈哈哈")driver.find_element(By.CSS_SELECTOR, "#kw").clear()//如果这里不clear会拼接起来driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("沉浮录")

2.4 获取⽂本信息

如果判断获取到的元素对应的⽂本是否符合预期呢?获取元素对应的⽂本并打印⼀下~~ 获取⽂本信息: .text
 

# #获取文本信息
text = driver.find_element(By.CSS_SELECTOR, "#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title").textprint(text)
#获取百度一下按钮上的文字    #特殊情况 元素属性值 != 文本信息text = driver.find_element(By.CSS_SELECTOR, "#su").text #这里获取不到”百度一下”的属性值text = driver.find_element(By.CSS_SELECTOR, "#su").get_attribute("value")assert text == "百度一下"print(text)

2.5 获取当前⻚⾯标题和url

.title

.current_url

#获取当前页面的标题 和 URL
title = driver.title
url = driver.current_url
print(title)
print(url)


3. 窗口

打开⼀个新的页⾯之后获取到的title和URL仍然还是前⼀个页⾯的?
当我们⼿⼯测试的时候,我们可以通过眼睛来判断当前的窗⼝是什么,但对于程序来说它是不知道当 前最新的窗⼝应该是哪⼀个。对于程序来说它怎么来识别每⼀个窗⼝呢?每个浏览器窗⼝都有⼀个唯⼀的属性句柄(handle)来表⽰,我们就可以通过句柄来切换

3.1窗⼝

1)获取当前页⾯句柄:
curHandle = driver.current_window_handle
3)获取所有页⾯句柄:
allHandle = driver.window_handles
3)切换当前句柄为最新页⾯
#遍历所有的句柄,切换到新的页面
for handle in allHandle:if handle != curHandle:#切换句柄driver.switch_to.window(handle)

3.2 窗⼝设置⼤⼩

//窗⼝最⼤化
driver.maximize_window()//窗⼝最⼩化
driver.minimize_window()//全屏窗⼝
driver.fullscreen_window()//⼿动设置窗⼝⼤⼩
driver.set_window_size(1024,800)

3.3 切换窗口

3.4 屏幕截图

我们的⾃动化脚本—般部署在机器上⾃动的去运⾏,如果出现了报错,我们是不知道的,可以通过抓 拍来记录当时的错误场景
由于图片给定的名称是固定的,当我们多次运行自动化脚本时,历史的图片会被覆盖:

4. 弹窗

弹窗是在页⾯是找不到任何元素的,这种情况怎么处理?使⽤selenium提供的Alert接⼝

4.1 警告弹窗+确认弹窗
 

# #切换弹窗
# alert = driver.switch_to.alert
#确认或者取消弹窗
# alert.accept()
# alert.dismiss()

警告弹窗用alert.accept() ,alert.dismiss()都一样,

但是确认弹窗就得选其中一个

4.2 提⽰弹窗

# #提示弹窗---输入框
# driver.get("url")
# driver.find_element(By.CSS_SELECTOR, "").click()
# #输入文本 + 确认+ 取消
# alert = driver.switch_to.alert
# alert.send_keys("找实习")
# alert.accept()
# alert.dismiss()


5. 等待

通常代码执⾏的速度⽐页⾯渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?可 以使⽤selenium中提供的三种等待⽅法:

5.1 强制等待

time.sleep( )

当调用该方法时,程序会直接阻塞,等待指定秒数后会继续执行后续代码

实际在工作中,业务场景比较复杂时,要添加的自动化脚本非常多,通常来说自动化测试脚本数量可达到上百个。这里假设200个脚本,每个脚本添加若干个等待时间,假设平均等待时间为6秒200*6=1200s 大约20min,这个时间在程序运行时间里算是非常久的,而实际可接受的自动化运行时间为几秒或者几分钟之内

优点:使⽤简单,调试的时候⽐较有效
缺点:影响运⾏效率,浪费⼤量的时间

5.2 隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码 继续执⾏,直到超时没找到元素才会报错。
implicitly_wait ( )  参数:Duration类中提供的毫秒、秒、分钟等⽅法

隐式等待 作⽤域 是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit( )),隐式等待 就⼀直⽣效。
优点:智能等待,作⽤于全局

5.3 显示等待

显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码
new WebDriverWait(driver, Duration.ofSeconds(3)).until($express)
$press:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类
返回值:boolean
示例:
WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));
优点:显⽰等待是智能等待,可以⾃定义显⽰等待的条件,操作灵活
缺点:写法复杂

隐式等待和显⽰等待⼀起使⽤效果如何呢?
测试⼀下:
ChromeIns = ChromeDriverManager().install()
driver = webdriver.Chrome(service=Service(ChromeIns))
driver.get("https://www.baidu.com")#隐式等待设置为10s,显⽰等待设置为15s,那么结果会是15+10=25s吗?
driver.implicitly_wait(10)
wait = WebDriverWait(driver,15)
start = time.time()#保存到当前时间(时间戳)
try:res = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="haaaaaotsearch-content-wrapper"]/li[1]/a')))#这里专门设置一个找不到的元素让进行等待
except:end = time.time()#保存到当前时间(时间戳)print("no such element")
driver.quit()
print(end-start)
结果:重试多次,最终打印的等待时间有10s、11s....
结论: 不要混合隐式和显式等待 ,可能会导致不可预测的等待时间
强制等待可以任意配合隐式等待和显示等待使用

6. 浏览器导航

常见操作:
1)打开⽹站
// 更⻓的⽅法
driver.navigate().to("https://selenium.dev");
// 简洁的⽅法
driver.get("https://selenium.dev")

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

driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();

7. 文件上传

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

注意:用 \\ 转义字符


8. 浏览器参数设置

http://www.lryc.cn/news/576659.html

相关文章:

  • 西门子S7-200 SMART PLC:小型自动化领域的高效之选
  • 华为云鸿蒙应用入门级开发者认证 实验部分题目及操作步骤
  • 基于Uniapp+SpringBoot+Vue 的在线商城小程序
  • AI 在金融领域的落地实践:从智能风控到量化交易的技术突破与案例解析
  • 【Docker基础】Docker容器管理:docker stats及其参数详解
  • 使用asyncio构建高性能网络爬虫
  • 华为云Flexus+DeepSeek征文|基于Dify构建AI资讯语音播报工作流
  • Python pyserial库【串口通信】全面讲解
  • 从傅立叶级数到傅里叶变换和离散傅里叶变换及其逆变换:FS FT DFT IDFT
  • 华为云Flexus+DeepSeek征文 | 华为云ModelArts Studio实战指南:创建高效的AingDesk知识库问答助手
  • Java锁机制知识点
  • Java安装与使用教程
  • FPGA设计的上板调试
  • zookeeper Curator(2):Curator的节点操作
  • 移动端日志平台EMAS
  • 在C++中#pragma“可选预处理指令的作用“。
  • OpenCV图像噪点消除五大滤波方法
  • springboot+Vue逍遥大药房管理系统
  • Redis—主从复制
  • 多径信道下移动通信信号均衡技术研究与实现
  • 常用工具库
  • 领域驱动设计(DDD)【22】之限定建模技术
  • electron中显示echarts
  • 顺序表应用实践:从通讯录实现到性能优化深度解析
  • 第6篇:中间件——Gin的请求处理管道
  • 印度和澳洲的地理因素
  • c++ 学习(二、结构体)
  • WordPress最新版6.8.1安装教程
  • 如何修改discuz文章标题字数限制 修改成255
  • SQL关键字三分钟入门:ROW_NUMBER() —— 窗口函数为每一行编号