Selenium——基于Web的UI自动化测试工具(二)

九、使用驱动.switch_to.alert 来获取页面上的JS对话框

由于JS对话框不是页面元素(不是标签,定位不到)

代码示例:

对话框 = 驱动.switch_to.alert # 获取页面对话框
对话框.text # 获取对话框上的提示文本
对话框.accept() # 点击对话框上的确定按钮
对话框.dismiss() # 点击对话框上的取消按钮
对话框.send_keys("内容") # 向对话框中的输入框中输入指定内容

十、使用驱动.switch_to.frame(xxx) 来切换框架

页面中,出现了 <frame> 或者 <iframe> 标签,引入了另外的html文件中的内容。这个时候,如果你需要在框架内部的页面html文件中,定位元素,就得切换框架。

切换进入到内部框架:

驱动.switch_to.frame(xxx)

传入框架标签的特征,作为参数:id属性、name属性、索引、框架标签元素;

从内部框架切出来:

驱动.switch_to.default_content() ------ 切换到最外部框架
驱动.switch_to.parent_frame() ------ 切换到上一级框架

十一、使用驱动.switch_to.window(xxx) 来切换窗口

通过操作当前窗口页面中的超链接,在浏览器中打开了新窗口,如果想要在新窗口中定位元素,就得先将驱动切换到新窗口。

每个打开的窗口,在浏览器中,都有一个唯一的编号(也称为句柄)

驱动.window_handles ------ 获取当前浏览器中,所有窗口的句柄列表
驱动.current_window_handle ------ 获取驱动对象,当前指向的窗口句柄

切换的方法:

驱动.switch_to.window(新窗口句柄) ------ 将驱动对象切换到指定的窗口上

常见的示例代码:

驱动.switch_to.window(驱动.window_handles[1])

十二、三种等待

强制等待(sleep实现的固定时长的休眠)

本质:调用time模块的sleep函数,让程序休眠指定的时长。

隐式等待(智能等待,智能:等到元素出现,就不等了)

思路:在创建了浏览器驱动对象之后,可以对驱动对象进行设置:隐式等待的设置,告之其在后期定位单个元素的时候,可以尝试等待一个最长的时间,如果元素出现了,就立刻返回这个元素,如果没有出现,就一直等待,要么等到元素出现,要么等到超过了最长的等待时候,而报错;

特点:

只需要在一开始设置一次,会影响接下来所有定位元素的方法。

后面元素定位的方法调用时,并没有什么不同,完全从代码上感觉不到是否进行了等待。

实现:

驱动.implicitly_wait(最长等待时间)

显式等待(智能等待,智能:等到元素出现,就不等了)

思路:创建一个 WebDriverWait 类的对象,调用它的 until 方法,会给这个方法传入一个条件,条件成立后,until方法才结束。在定位一个需要等待的元素的时候,我们会传入一个"被定位的元素的出现"条件,如果这个条件成立(被定位的元素出现了),则返回出现的这个页面元素。

特点:

哪个元素要显示等待,就明确在代码上体现出来。

如果超过最长的等待时间,until方法会报一个"超时的异常":TimeoutException示例:

python 复制代码
from selenium.webdriver.support.wait 
import WebDriverWaitfrom selenium.webdriver.support 
import expected_conditions as EC
# 定位元素的策略和值,组成一个元素定位器 ------ 由定位元素的策略和值,组成的元组和列表
locator = (By.ID, "cont")
# 调用"等待对象"的until(直到)方法,等待被定为的元素出现(返回这个出现的元素)为止,或
者超时(报错)
elem = WebDriverWait(驱动,30).until(EC.presence_of_element_located(locator))

十三、调用驱动.execute_script("JS代码") 执行JS代码

将js代码,发送到浏览器上,去执行。

实现: 驱动.execute_script("JS代码")

代码示例:

python 复制代码
# 将"实现去掉输入框只读属性的JS代码"发送到浏览器上去执行
dr.execute_script("document.getElementById('date1').removeAttribute('readonl
y')")
# 直接将测试用例的出生日期数据,输入到输入框中
dr.find_element(By.ID, "date1").send_keys("2024-2-5")

十四、使用ActionChains类,实现一些不常见的鼠标操作

双击、移动到元素上、拖拽这些不常见的操作,无法直接对"页面元素"进行操作。因此,需要借助ActionChains类来实现

思路:

python 复制代码
ActionChains(驱动).操作1(元素).操作2(元素).....perform()

常见操作:

python 复制代码
move_to_element(元素) ------ 移动鼠标到指定的元素上
double_click(元素) ------ 双击指定元素
click_and_hold(元素) ------ 点住元素不放
release() ------ 放开鼠标

示例代码:

python 复制代码
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(驱动).double_click(元素).perform() # 双击指定元素
ActionChains(驱动).move_to_element(元素).perform() # 移动到元素上
ActionChains(驱动).click_and_hold(元素1).move_to_element(元素2).release().perform()
# 拖拽元素1到元素2中

十五、使用Keys类,实现特殊按键的发送

python 复制代码
页面元素.send_keys("内容")
页面元素.send_keys(特殊按键, "小写的按键字母")
页面元素.send_keys(Keys.CONTROL, "a") ------ 全选
页面元素.send_keys(Keys.CONTROL, "c") ------ 复制
页面元素.send_keys(Keys.CONTROL, "v") ------ 粘贴

示例代码:

python 复制代码
from selenium.webdriver.common.keys from Keys
输入框元素.send_keys(Keys.CONTROL, "a") # 全选
输入框元素.send_keys(Keys.CONTROL, "c") # 复制
输入框元素.send_keys(Keys.CONTROL, "v") # 粘贴

十六、截图(拍快照,存储成png格式的图片文件)

将整个页面拍快照:

python 复制代码
驱动.get_screenshot_as_file("xxx.png")

将指定的元素拍快照:

python 复制代码
元素.screenshot("xxx.png")
相关推荐
测试杂货铺1 小时前
Jmeter压测实战:Jmeter二次开发之自定义函数
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
测试老哥2 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
一条测试老狗4 小时前
【UI自动化】从WebDriver看Selenium与Appium的底层关联
selenium·appium·自动化
Linux运维技术栈4 小时前
Ansible(自动化运维)环境搭建及ansible-vault加密配置
运维·自动化·ansible
测试19986 小时前
外包干了2年,技术退步明显....
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
Quz8 小时前
Wireshark协议相关功能:过滤、启用/禁用、导出和统计查看
网络·测试工具·wireshark
代码的乐趣10 小时前
支持selenium的chrome driver更新到131.0.6778.204
chrome·python·selenium
oneouto11 小时前
selenium学习笔记(一)
笔记·学习·selenium