selenium UI使用小技巧集合

news/2025/2/11 15:12:54/

selenium这个工具就不用我多介绍了吧,咱们已经说过很多很多次咯,所以就直接上主题:

窗口截图

webdriver 提供了 get_screenshot_as_file()函数来截取当前窗口

from selenium import webdriver
from time import sleepdriver = webdriver.Chrome()
driver.get('http://www.baidu.com')# 截屏,截取整个页面
driver.get_screenshot_as_file("./all.png")
# 截屏,截取单个元素
ele = driver.find_element_by_id('kw')
ele.screenshot("./ele.png")driver.quit()

警告框处理

在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作

  • text:返回 alert/confirm/prompt 中的文字信息
  • accept():接受现有警告框
  • dismiss():取消现有警告框
  • send_keys(“haha”):发送文本至警告框
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("D:\\test\script\study\seleniumStu\day6\警告框.html")# # 触发对话框
# driver.find_element_by_id("bu1").click()
# al = driver.switch_to.alert
# time.sleep(3)
# al.accept()  # 确认对话框
# # 触发确认框
# driver.find_element_by_id("bu2").click()
# al = driver.switch_to.alert
# al.accept()  # 确认对话框
# driver.find_element_by_id("bu2").click()
# al.dismiss()  # 取消对话框
# 触发提示框
driver.find_element_by_id("bu3").click()
al = driver.switch_to.alert
al.send_keys("口罩太贵了")
al.accept()  # 确认对话框
time.sleep(3)
driver.quit()

鼠标事件

用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChains

ActionChains 类提供了鼠标操作的常用方法:

  • perform():执行操作
  • context_click():右击;
  • double_click():双击;
  • drag_and_drop():拖动;
  • move_to_element():鼠标悬停。
from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get("https://www.baidu.cn")# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()driver.quit()

键盘事件

Keys()类提供了键盘上几乎所有按键的方法。前面了解到, send_keys()方法可以用来模拟键盘输入, 除此 之外, 我们还可以用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等

from selenium import webdriver
# 引入 Keys 模块
from selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()
driver.get("http://www.baidu.com")# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)# 输入空格键+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)driver.quit()

以下为常用的键盘操作:

  • send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
  • send_keys(Keys.SPACE) 空格键(Space)
  • send_keys(Keys.TAB) 制表键(Tab)
  • send_keys(Keys.ESCAPE) 回退键(Esc)
  • send_keys(Keys.ENTER) 回车键(Enter)
  • send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
  • send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
  • send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
  • send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
  • send_keys(Keys.F1) 键盘 F1
  • ……
  • send_keys(Keys.F12) 键盘 F12

iframe切换

iframe,又叫浮动帧标记,是内嵌的网页元素,可以将一个html文件嵌入到另一个html文件中显示

对iframe进行操作,需要用到以下三种方法:

switch_to_iframe() 切换到iframe上(未来会被删除,不建议使用)

switch_to.frame() 切换到iframe上

switch_to.default_content() 切换回原主页面

通过如下方式进行切换操作

#定位到iframe

iframe=driver.find_element_by_id(“x-URS-iframe”)

#切换到iframe

driver.switch_to_frame(iframe)

from selenium import webdriver
import timedriver = webdriver.Chrome("D:\\tool\selenium\chromedriver.exe")
# 隐式等待
driver.implicitly_wait(5)
driver.get("D:\\test\script\study\seleniumStu\day3\\test.html")"""
对iframe进行操作,需要用到以下三种方法:
switch_to_iframe()                       切换到iframe上
switch_to.frame()                         切换到iframe上
switch_to.default_content()         切换回原主页面
"""
iframe = driver.find_element_by_id("f91fb5bc-bd95-45bf-bd77-977a2afbd25f")
driver.switch_to.frame(iframe)
driver.find_element_by_id("e4890ded-16e1-4445-bf8e-7f655793f332").send_keys("haha")time.sleep(5)
driver.quit()

多标签页切换

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。WebDriver提供了以下方法

current_window_handle:获得当前标签页句柄

window_handles:返回所有便签页的句柄

switch_to.window(标签页句柄):切换到对应的标签页

关闭标签页使用 close 方法

from selenium import webdriver# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 访问网址
driver.get("http://www.baidu.com")# 找到搜索按钮
input_element = driver.find_element_by_id("kw")
# 输入搜索内容
input_element.send_keys("松勤\n")# 点击松勤教育官网
driver.find_element_by_css_selector("#\34  > h3 > a > em").click()# 获得当前所有打开的窗口的句柄
all_handles = driver.window_handlesfor handle in all_handles:driver.switch_to.window(handle)print(driver.title)# 退出浏览器
driver.quit()

补充

#将页面滚动条拖到底部

js=“var q=document.documentElement.scrollTop=100000”

driver.execute_script(js)

time.sleep(3)

#将滚动条移动到页面的顶部

js=“var q=document.documentElement.scrollTop=0”

driver.execute_script(js)

time.sleep(3)

#将页面滚动条移动到页面任意位置,改变等于号后的数值即可

js=“var q=document.documentElement.scrollTop=50”

driver.execute_script(js)

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以加入我们的QQ群:746506216,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/702.html

相关文章

C语言——矩阵转置

矩阵转置的原理&#xff1a;行元素变成列元素&#xff0c;列元素变成行元素 例如&#xff1a; 矩阵转置代码 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<math.h>//矩阵转置 double** Matrix_T(double** arr) {if(arrNULL)e…

25K 入职腾讯的那天,我哭了...

悲催的经历&#xff1a; 先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;17 年本科毕业&#xff0c;一毕业就进入了“阿里”测试 岗(进去才知道是接了个阿里外包项目&#xff0c;可是刚毕业谁知道什么外包不外包的)。 更悲催的是&#xff1a;刚入职因为家里出现一…

【LIMU-Bert论文阅读】

LIMU-BERT: Unleashing the Potential of Unlabeled Data for IMU Sensing Applications 题目重点&#xff1a; 充分利用无标签数据适用于IMU传感器应用&#xff08;并没有指出specfic task&#xff09; 文章核心&#xff1a; 如何根据IMU数据的特征设计出LIMU-Bert&#xff0c…

UE5笔记【十一】蓝图变量BluePrint Variables

类似于在材料中将配置参数化&#xff0c;我们这里也可以将配置变量化。最后实现在对象detail细节中设置修改。 在左侧组件中找到【变量】&#xff0c;然后点击那个加号&#xff0c;添加两个变量用来控制楼梯和盒体的升降速度。 分别命名为&#xff1a;BoxSpeed和StairSpeed。然…

Spring Security基于jwt实现权限校验

一 引言 在基于springsecurity和jwt实现的单体项目token认证中我实现了基于jwt实现的认证,本文在此基础上继续实现权限认证 用户认证成功后携带jwt发起请求,请求被AuthenticationFilter拦截到,进行jwt的校验jwt校验成功后,调用JwtAuthenticationProvider从jwt中获得权限信息…

Android Audio常见问题分析方法

Audio常见问题分析方法无声断音杂音设备切换延迟播放焦点问题多路录音有线耳机蓝牙控制类问题播放时间有问题声音在不同应用中切换的问题无声问题&#xff08;连上BT&#xff09;音质问题录音路由问题BT audio分析总结无声 整机无声&#xff08;bt和手机一起播放声音时&#x…

NLP中的对抗训练(附PyTorch实现)

对抗样本的基本概念 要认识对抗训练&#xff0c;首先要了解"对抗样本"&#xff0c;它首先出现在论文Intriguing properties of neural networks之中。简单来说&#xff0c;它是指对于人类来说"看起来"几乎一样&#xff0c;但对于模型来说预测结果却完全不…