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")
相关推荐
海阔天空_201316 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
桥田智能19 分钟前
气爪在自动化装配线中是如何应用的?
运维·自动化
代码欢乐豆1 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
Tassel_YUE2 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
测试杂货铺4 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
小码哥说测试6 小时前
接口测试用例设计的关键步骤与技巧解析!
自动化测试·测试工具·jmeter·职场和发展·测试用例·接口测试·postman
小白学大数据12 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman91112 小时前
python在word中插入图片
python·microsoft·自动化·word
awonw21 小时前
[java][框架]springMVC(1/2)
测试工具·postman
2401_857622661 天前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化