自动化测试——Selenium

news/2025/1/14 16:11:38/文章来源:https://www.cnblogs.com/datacenter/p/18671036

01  元素操作方法

方法:
1、.send_keys()  # 输入方法
2、.click()  # 点击方法
3、.clear()  # 清空方法

在输入方法之前一定要清空操作!!

# 导包
from time import sleep
from Selenium import webdriver# 实例化浏览器
driver = webdriver.Chrome()# 打开网址
driver.get('https://www.baidu.com/')# 需求
ele = driver.find_element_by_css_selector('#kw')
ele.send_keys('易烊千玺')
sleep(2)# 清空
ele.clear()
ele.send_keys('王嘉尔')# 时间轴看效果
sleep(3)# 关闭页面
driver.quit()

02 浏览器操作方法

常用的浏览器操作系统API

# 方法
"""
1、driver.maximize_window()  # 最大化浏览器
2、driver.set_window_size(w,h)  # 设置浏览器大小 单位像素 【了解】
3、driver.set_window_position(x,y)  # 设置浏览器位置  【了解】
4、driver.back() # 后退操作
5、driver.forward() # 前进操作
6、driver.refrensh() # 刷新操作
7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
8、driver.quit() # 关闭driver对象启动的全部页面
9、driver.title # 获取当前页面title信息
10、driver.current_url # 获取当前页面url信息
"""
"""
应用:driver.maximize_windows()  # 窗口最大化driver.set_window_size(w,h) # 设置浏览器大小 【了解】driver.set_window_position(x,y) # 设置浏览器窗口位置 【了解】
"""

from time import sleep
from Selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')
# 窗口最大化
driver.maximize_window()
sleep(1)
# 设置浏览器宽,高 【了解】
driver.set_window_size(1000, 1000)
sleep(1)
# 设置窗口浏览器位置  【了解】
driver.set_window_position(200, 200)sleep(3)driver.quit()
"""
driver.back()
driver.forward()
driver.refresh()
"""
from time import sleep
from Selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.sogou.com/')
driver.find_element_by_css_selector('#query').send_keys('易烊千玺')
driver.find_element_by_id('stb').click()
sleep(2)# 后退
driver.back()
sleep(2)# 前进
driver.forward()
sleep(2)# 刷新
driver.refresh()sleep(3)driver.quit()
"""
driver.close() # 关闭当前主窗口,默认启动的界面就是主窗口
driver.quit() # 关闭全部页面
driver.title  # 获取页面标题
driver.current_url  # 获取页面地址 
"""

from time import sleep
from Selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.sogou.com/')
driver.find_element_by_link_text('图片').click()# 这两个属性可以用来做断言使用
print("当前页面标题:", driver.title)
print("当前页面的url:", driver.current_url)# 这里关闭的是原始页面,而不是新的页面,只有完成页面切换才可以关闭新的页面
# 场景:关闭单个页面使用
driver.close()
sleep(3)# 关闭浏览器驱动对象的所有页面
driver.quit()

注意:

driver.close(),当前关闭的是主窗口,只有完成页面切换才可以关闭当前新的页面。

1、driver.title和drivet.current_url是属性没有括号。应用场景:一般判断上不操作是否执行成功。

2、driver.maximize_window()一般为前置代码放到获取driver地址后,进行浏览器窗口的最大化

3、driver.refresh()向浏览器重新发出请求,刷新页面,在cookie会用到

4、driver.close()和driver.quit()的区别:

  • close():关闭当前主窗口

  • quit():关闭由driver对象启动的所有页面

  • 如果只有一个窗口那么quit()和close()没有区别。

 03 获取元素信息操作

常用元素信息操作API

"""
方法:
1、text 获取元素的文本;如:driver.text
2、size 获取元素的大小:如:driver.size
3、get_attribute 获取元素属性值;如:driver.get_attribute("id") ,传递的参数是元素的属性名
4、is_displayed 判断元素是否可见 如:element.is_displayed()
5、is_enabled 判断元素是否可用 如:element.is_enabled()
6、is_selected 判断元素是否被选中 如:element.is_selected()"""
"""
text  获取元素文本 ,没有()
size  获取元素大小 ,没有()
get_attribute("属性名") 获取的是属性值
"""

from time import sleep
from Selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.sogou.com/')
ele = driver.find_element_by_id('query')
print("目标元素尺寸:", ele.size)new_ele = driver.find_element_by_id('hanyu')
print("目标元素文本:", new_ele.text)link = driver.find_element_by_link_text("图片")
print("目标元素属性值:", link.get_attribute('id'))sleep(3)# 关闭浏览器驱动对象的所有页面
driver.quit()
"""
is_displayed() 判断元素是否可见,如:element.is_displayed
is_enabled() 判断元素是否可用, 如:element.is_enabled
is_selected() 判断元素是否被选中,如:element.is_selected
"""

from time import sleep
from Selenium import webdriverdriver = webdriver.Chrome()driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
# 判断元素是否可见,不可见并不代表不能定位
span = driver.find_element_by_name('sp1')
print("元素是否可见:", span.is_displayed())btn = driver.find_element_by_id('cancelA')
print("元素是否可用:", btn.is_enabled())check = driver.find_element_by_id('lia')
print("元素是否被选中:", check.is_selected())sleep(3)# 关闭浏览器驱动对象的所有页面
driver.quit()

注意:

里面的返回的结果都是True和False。

04 鼠标操作(需要实例化鼠标对象)

1、我们有了鼠标为什么还要使用鼠标操作??

为了满足丰富的html鼠标效果,必须使用对应的方法。

2、鼠标时间对应的方法在那个类中?

ActionChains类,实例化鼠标对象

导包:

from Selenium.webdriver.common.action_chains import ActionChains

3、鼠标事件常用的操作

"""
1、context_click(element) # 右击
2、double_click(element)  #双击
3、double_and_drop(source, target)  # 拖拽
4、move_to_element(element)  # 悬停 【重点】
5、perform()  # 执行以上事件的方法 【重点】
"""

4.1鼠标右键及双击

"""
鼠标操作:
context_click() 右键
double_click() 鼠标双击
"""
from time import sleep
from Selenium import webdriver
from Selenium.webdriver import ActionChainsdriver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 定位目标
ele = driver.find_element_by_id('kw')
# 实例化 鼠标对象
action = ActionChains(driver)、# 鼠标右键
action.context_click(ele)# 鼠标双击
action.double_click(ele)# 鼠标执行操作!!!不执行没效果
action.perform()sleep(3)driver.quit()

4.2鼠标拖拽

"""
鼠标操作:
# 鼠标拖拽
action.drag_and_drop(source, target)
"""
from time import sleep
from Selenium import webdriver
from Selenium.webdriver import ActionChainsdriver = webdriver.Chrome()
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/drag.html')red = driver.find_element_by_xpath('//*[@id="div1"]')
blue = driver.find_element_by_xpath('//*[@id="div2"]')# 实例化鼠标
action = ActionChains(driver)
# 鼠标拖拽
action.drag_and_drop(red, blue)
# 鼠标执行
action.perform()sleep(3)driver.quit()

4.3鼠标悬停【重点】

"""
鼠标操作:
# 鼠标悬停 【重点】
action.move_to_element(element)
"""
from time import sleep
from Selenium import webdriver
from Selenium.webdriver import ActionChainsdriver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
ele = driver.find_element_by_id('s-usersetting-top')# 实例化鼠标
action = ActionChains(driver)
# 鼠标悬停
action.move_to_element(ele)
# 鼠标执行
action.perform()sleep(3)driver.quit()

注意:

Selenium框架虽然提供了鼠标右键方法,但是没有提供选择右键菜单方法,可以通过键盘快捷键操作实现。

05 键盘操作(不需要实例化对象)

1、说明:键盘对应的方法在Keys类中

# 包
from Selenium.webdriver.common.keys import Keys

2、快捷键

(这里只讲windows操作系统的快捷键):

CONTROL:Ctrl键

BACK_SPACE:等价于BACKSPACE(删除)

其他:可以藏奥Keys底层的定义

3、应用

# 单键
element.send_keys(Keys.XXX)
# 组合键
element.send_keys(Keys.XXX, 'a') # 注意这里的组合键都是小写
"""
键盘操作
"""
from time import sleep
from Selenium import webdriver
from Selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()
driver.get('https://www.baidu.com/')ele = driver.find_element_by_id('kw')
ele.send_keys('易烊千玺')
sleep(1)
ele.send_keys(Keys.BACK_SPACE)
sleep(1)
# 组合键 Ctrl + a 全选 ,注意这里的组合键都是小写
ele.send_keys(Keys.CONTROL, 'a')
sleep(1)
ele.send_keys(Keys.CONTROL, 'x')
sleep(1)
ele.send_keys(Keys.CONTROL, 'v')sleep(3)driver.quit()

06 等待元素

1、为什么要设置元素等待

由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。

2、什么是元素等待

 元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。
3、元素等待分类

隐式等待:针对全局元素生效;(讲这个)

显示等待:稍微麻烦,有兴趣的可以下去了解,他是针对单个元素生效。

隐式等待方法:

driver.implicitly_wait(30) # 一般情况下设置30秒

特色:

1. 针对所有元素生效。
2. 一般情况下为前置必写代码(1.获取浏览器驱动对象;2. 最大化浏览器;3. 设置隐式等待)
"""
隐式等待
"""
from time import sleep
from Selenium import webdriver
from Selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()
# 1、获取浏览器驱动对象
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA%E7%AD%89%E5%BE%85.html')
# 2、窗口最大化
driver.maximize_window()
# 3、设置隐式等待
driver.implicitly_wait(30)
ele = driver.find_element_by_id('userA')
ele.send_keys('admin')sleep(3)driver.quit()

07 下拉框(需要实例化下拉框)

1、为什么单独使用下拉框?

如果option选项没有value值的化,css定位或其他定位就不太方便。

 2、使用Select类

1)、导包:fromSelenium.webdriver.support.selectimprotSelect

2)、实例化下拉框:s=Select(element)

3)、调用方法:s.select_by_index()索引从0开始

3、Select类提供的方法

1)、select_by_index()#通过索引定位

2)、select_by_value()#通过value值

3)、select_by_visible_text()#显示文本

"""
Select类方法:
需要实例化下拉框元素定位
"""
from time import sleepfrom Selenium import webdriver
from Selenium.webdriver.support.select import Selectdriver = webdriver.Chrome()
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
ele = driver.find_element_by_id('selectA')# 实例化下拉框
s = Select(ele)# index 索引方法
s.select_by_index(1)
sleep(1)# value 属性值选择目标元素
s.select_by_value('sz')
sleep(1)# text 采用文本的方式选择目标信息
s.select_by_visible_text('A北京')sleep(3)driver.quit()

08 弹出框

1、为什么要处理弹出框?

一旦出现弹出框,如果不进行处理,则后续操作不可实现

2、弹窗分类

  • 系统弹窗:JS实现

  • 自定义弹窗:前端代码封装

3、对话框的分类:

  • alert:警告框

  • confirm:确认框

  • prompt:提示框

4、如何处理

系统弹窗:上面的对话框处理方式都一样;

步骤:
1、需要切换到对话框driver.switch_to.alert
2、处理对话框alert.text # 获取文本alert.accept() # 接受alert.dismiss() # 拒接
"""
系统弹窗:
切换对话框:driver.switch_to.alert
同意:alert.accept()
拒绝:alert.dismiss()
"""
from time import sleepfrom Selenium import webdriver
from Selenium.webdriver.support.select import Selectdriver = webdriver.Chrome()driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')driver.find_element_by_id('confirma').click()# 切换对话框
alert = driver.switch_to.alert
print("文本内容是:", alert.text)
sleep(2)# 拒绝
alert.dismiss()# 同意
# alert.accept()sleep(3)driver.quit()

自定义弹窗,由于可以鼠标右击检查选项获取元素信息,所以出现自行已弹窗的时候,直接定义目标元素,并进行移除操作即可。

09 滚动条

1、为什么要是用滚动条?

在一些特殊场景中,一些按钮是在页面最下角,需要使用滚动条拉到最底层。

2、操作步骤

Selenium框架中没有专门处理滚动条的方法,需要通过调用Js代码实现操作;

第一步

设置操作滚动条操作语句:

js_down="window.scollTo(0,1000)"

  • >0:为左边距-----》水平滚动条

  • >1000:为垂直滚动条

第二步

调用执行js方法,将设置js语句传入方法中:>方法:driver.execute_script(js_down)

10 切换frame表单

1、应用场景:

处于frame中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,因此需要先切换到frame,再进行元素定位操作。

2、如何切换frame

方法:

driver.switch_to.frame("id/name/element")传入的是代表frame唯一的特征值。

"""
frame的切换
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')# 切换到frame
driver.switch_to.frame('idframe1')
# 在frame表单中填写信息
driver.find_element_by_id('userA').send_keys('admin')sleep(3)driver.quit()

连续切换frame

说明:如果要连续切换frame必须要先回到默认页面,才能够实现下一个frame的切换。

回到主页面的方法:

driver.switch_to.default_content()

"""
需要默认切换到frame
方法:driver.switch_to.default_content()
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')driver.switch_to.frame('idframe1')
driver.find_element_by_id('userA').send_keys('admin')driver.switch_to.default_content()
driver.switch_to.frame('myframe2')
driver.find_element_by_id('userB').send_keys('admin4')sleep(3)driver.quit()

11 多窗口切换

1、为什么要切换多窗口

页面是存在多窗口的,但是selenium默认焦点只会在主窗口上的所有元素,不切换窗口,就不能操作除主窗口以外的窗口内元素。

2、如何切换

每个窗口都有唯一的一个句柄值,那么我们就可以通过句柄值来完成窗口的切换操作

方法:1)、driver.current_window_handle(获取当前的句柄值)2)、driver.window_handles(获取当前由driver启动所有窗口句柄)3)、driver.switch_to.window(handle)—>切换窗口
"""
多窗口切换
driver.current_window_handle  获取当前的句柄值
driver.window_handles  获取driver启动的所有窗口句柄
driver.switch_to.window(handles[-1]) 切换窗口操作
"""
from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')driver.find_element_by_id('ZCB').click()
# 1、获取当前的句柄值
# print("当前的句柄值是:", driver.current_window_handle)# 2、
# 1).切换窗口操作,driver.window_handles 获取driver启动的所有窗口句柄
handles = driver.window_handles# 2).切换窗口工作
driver.switch_to.window(handles[-1])
driver.find_element_by_id('userB').send_keys('admin9')sleep(3)driver.quit()

注意:

这里的窗口切换也对应到了close()方法的作用,现在使用close()就是关闭当前页面,如果还想重新操作原始页面,务必完成窗口切换。

12 截图操作

使用的方法:driver.get_screenshot_as_file(imgepath)

参数:imagepath:为图片要保存的目录地址及文件名称

"""
截图:driver.get_screenshot_as_file(imgepath)
"""
from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')driver.find_element_by_xpath('//*[@id="kw"]').send_keys('易烊千玺')
# 截图方法,建议使用png格式 , ./为当前路径,  ../为上一级路径
driver.get_screenshot_as_file('./info.png')sleep(3)driver.quit()

注意:

指定图片存放的路径,需要自己手动创建文件夹

 

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

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

相关文章

linux 配置服务器间免密登录

一、准备工作 环境:主机名 IPjftest-221 192.168.31.221jftest-222 192.168.31.222jftest-223 192.168.31.223 以jftest-222为例: 二、操作过程 1.生成密钥对 [root@jftest-222 ~]# ssh-keygen密钥对存放位置 $HOME/.ssh/ 其中 id_rsa 为私钥; id_rsa.pub为公钥2. 将公钥复制…

WSL2 + ROS2 无法开启 rviz2、rqt 等图形化窗口

电脑是 AMD CPU 与 NVIDIA 独立显卡,CPU 有核显。 可能是对 AMD 核显没有兼容吗?需要让 rviz2、rqt 等图形化窗口运行在 NVIDIA 独显上吗? 解决办法是,在 BIOS 中设置仅使用独显模式。

此芯片具有自动校准功能还提供了1路输出功能VKD233HB SOT23-6L单按键触摸检测芯片/单通道触控方案

产品品牌:永嘉微电/VINKA 产品型号:VKD233HB 封装形式:SOP23-6L 概 述 VKD233HB具有1个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有 较高的集成度,仅需极少的外部组件便可实现触摸按键的检测。 提供了1路输出功能,可通过IO脚选择输出电平,输出模式。芯…

mac电脑--JDK配置

1.安装好jdk 打开mac环境配置:vim .bash_profile,然后 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.jdk/Contents/Home 可在intellij IDEA - FILE -----找到 验证配置:java -version,出现版本信息,安装即成功

【Aegisub】ASS常用特效标签整理笔记

目录特殊符号 (以下符号均使用在文字行中而不是{}标签内)1.软换行与硬换行2.硬空格特效标签 (以下符号均使用在{}标签内)1.斜体2.粗体3.下划线4.删除线5.边框宽度6.阴影距离7.边框模糊8.边缘模糊9.字体名称10.字体大小(绝对)11.字体大小(相对)12.字符间距13.文本旋转14.文本…

2.0 电气件---浪涌保护器(SPD)

1、简介 浪涌保护器也叫防雷器,是一种为各类电子设备、仪器仪表、通讯线路提供安全防护的电子装置。当电器回路或者通信线路中因为外界的干扰突然产生剑锋电流或者电压时,浪涌保护器能在极端的时间内导通分流,从而避免浪涌对回路中其他设备的损害。 主要可以分为两类:电压开…

意图框架习惯推荐方案,为用户提供个性化内容分发

在快速发展的现代生活中,用户面临着时间紧迫、信息过载和决策困难等痛点。例如新闻资讯过多,寻找感兴趣的内容费时费力;音乐和视频服务推荐内容不符合个人口味等。这些痛点,无疑增加了用户的烦恼,也给应用的开发者带来了挑战:如何更好识别用户意图,实现精准推荐,提高应…

[ABC136F] Enclosed Points

前言 模拟赛 \(\rm{T1}\) , 全世界都切出来了 思路 首先容易想到换贡献主体, 容易想到按点计算贡献 (所以我赛时为什么叉掉这个直接去按矩阵算贡献了, 无语) 考虑对于一个点, 其贡献的来源: 只要有一个子集构成的矩形包含它, 就会产生贡献 问题转化为对于一个点, 有多少个子集包…

IDEA中如何查看最近打开过的文件?

前言 大家好,我是小徐啊。我们在Java开发的时候,最重要的是选择一款合适的开发工具,像eclipse,IDEA等。其中,IDEA是我平时在开发的时候,用的那一款工具,它功能十分强大。今天,我要来介绍下它的一个功能,就是查看下最近打开过的文件。 IDEA如何查看最近打开的文件 首先…

【邮件钓鱼】技术干货:从伪造域名到隐藏链接,攻防实战详解(中)

0x01 前言 ★ 声明:未知攻焉知防,本文以安全教育为主,不可用于违法行为,造成的一切后果,与本人无关。邮件伪造是信息安全中的常见手段之一,很多人在实践中因不了解核心原理而踩坑。本篇将结合实践经验,系统讲解邮件伪造的原理与操作方法。 如果对 SPF 和 DKIM 验证原理不…

达梦sqllog慢日志配置方案,抓取用户所有的操作记录

很多用户反馈,开启审计影响数据库性能,但是不开启审计,数据库没保障,数据无安全性,误删了数据,无法找到记录 达梦慢日志可以配置下,记录用户的操作记录mkdir -p /data/dmlog/log vi /data/dmdb/sqllog.ini BUF_TOTAL_SIZE = 10240 #SQL 日志 buffer 占用空间的上限,单…

自动化办公效率工具如何提升团队协作效率?5大路径

一、自动化办公效率工具的应用现状 随着信息技术的飞速发展,自动化办公效率工具在企业中的应用越来越广泛。这些工具通过集成多种功能,帮助企业优化工作流程、提高工作效率、降低运营成本。目前,自动化办公效率工具的应用现状主要体现在以下几个方面:(一)工作流程的自动化…