软件测试入门到精通-第10周-ui自动化测试-鼠标拖拽+其他常见api方式简介
《鼠标拖拽的奇幻漂流——Selenium自动化测试漫游指南》
一、鼠标拖拽的魔法原理
- 动作分解的艺术
• 基础三连击:按住-移动-松手(像玩抓娃娃机一样简单)
• 代码封装哲学:Selenium把复杂操作打包成"drag_and_drop"魔法咒语
• 平台变形记:
网页版:鼠标的华尔兹(PS图层拖动就是典型)
手机版:手指的芭蕾舞(需要Appium这类特制舞鞋)

二、四步召唤术详解
-
标准施法流程
步骤 | 咒语示例 | 魔法解析
—|—|—
1.准备法器 | from selenium.webdriver import ActionChains | 召唤鼠标操控卷轴
2.缔结契约 | action = ActionChains(driver) | 创建专属魔法傀儡
3.绘制法阵 | action.drag_and_drop(起点,终点) | 标记传送门坐标
4.发动魔法 | action.perform() | 最后别忘了念"急急如律令"! -
咒语细节说明书
• drag_and_drop(起点,终点):
起点:想搬家的元素(比如愤怒的小鸟)
终点:目的地坐标(比如猪猪堡垒)
• 组合技:可以先"悬停观察"再"瞬间移动"

三、实战魔法秀场
-
经典应用图鉴
平台 | 魔幻场景 | 关键技术
—|—|—
PC端 | 在线装修设计(拖动沙发) | 需要DOM元素穿上"draggable"斗篷
网页游戏 | 植物大战僵尸(放置向日葵) | 像素级定位要精准
移动端 | 抖音上下滑动 | 需要TouchAction特技 -
红蓝方块大冒险
from selenium.webdriver.common.by import By
# 寻找传送门
start_portal = driver.find_element(By.ID, "red_square")
end_portal = driver.find_element(By.ID, "blue_circle")
# 发动空间传送术
ActionChains(driver).drag_and_drop(start_portal, end_portal).perform()

验收标准:
红色方块是否成功穿越到蓝色区域(检查是否发生量子纠缠)
四、魔法事故处理司
-
施法前提条件
• 元素是否获得"可拖动"许可证(查看HTML的draggable属性)
• 坐标定位是否足够精确(建议使用XPath望远镜) -
常见翻车现场
事故现象 | 抢救方案
—|—
咒语失效 | 检查是否漏念perform()真言
元素纹丝不动 | 查看是否被CSS定身术束缚
手机端不响应 | 换用Appium的特制触控手套

五、魔法学院毕业考试
-
三句真言
“先找两扇门,再念搬运咒,最后要发动!” -
重点考题
知识点 | 难度 | 核心要诀
—|—|—
拖拽参数 | 🌟🌟 | 记住"先源后目标"的顺序
元素搜寻 | 🌟🌟🌟 | 双定位就像找两把钥匙
移动适配 | 🌟🌟🌟 | 需要框架护法加持 -
高阶修炼
• 节奏控制:在咒语间加入time.sleep()缓冲期
• 视觉验证:用before/after快照对比施法效果
六、魔导书结语
基础流程:引咒→缔约→施法→发动
核心要素:起点终点一个都不能少
跨平台要点:表面不同但本质相通

附:魔法检查清单
✅ 两处坐标是否锁定?
✅ 终极咒语是否吟唱?
✅ 元素是否获得拖动权限?
掌握这些就能成为拖拽魔法大师!✨(魔杖挥舞特效)
《Selenium魔法手册:驯服那些调皮的网页元素》
一、前言:当代码遇到"叛逆期"的网页
各位自动化测试的"驯兽师"们,想必都经历过这样的绝望时刻:你的代码就像个固执的相亲对象,明明元素就在那里,它却假装看不见;或是像一个迷路的小孩,在多个窗口间转来转去找不到回家的路。别担心,这份指南就是你的"驯兽鞭",专治各种网页元素的不听话症状。

二、等待的艺术:与其死等,不如"智能约会"
1. 石器时代 vs 智能时代
- time.sleep(5):就像约会时不管对方来不来都硬等5小时,可能对方早就到了,也可能根本没打算来
- WebDriverWait:更像是个聪明的媒婆,每隔0.5秒就探头看看对方来了没("轮询"的优雅说法),来了就立即牵手成功
# 直男式等待 - "我不管我就要等5秒!"
time.sleep(5)
# 高情商等待 - "亲爱的元素,我给你10秒梳妆打扮"
WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.ID,"shy_element"))
)
2. 智能等待的三大超能力
- 时间管理大师:可以精确设置等待上限,绝不浪费1毫秒
- 瞬间捕捉达人:元素一出现就立即"逮捕归案"
- 错误报告专家:超时会明确抛出TimeoutException,而不是给你个"神秘失踪案"
三、窗口和Frame:网页中的"套娃游戏"
1. 多窗口切换 - 浏览器版的"分身术"
# 获取所有窗口句柄(就像是拿到了房间的所有钥匙)
handles = driver.window_handles
# 总是记住:最新打开的窗口就像电梯 - 永远在最后面
driver.switch_to.window(handles[-1])
# 操作完后记得回家,不然妈妈会担心(原窗口会寂寞)
driver.switch_to.window(handles[0])
2. Frame处理 - 俄罗斯套娃的IT版本
想象Frame就像是网页中的"盗梦空间",你必须先进入正确的梦境层级才能找到你要的元素。
# 三种进入Frame的方式任君选择:
driver.switch_to.frame("passport_frame") # 用ID就像喊名字
driver.switch_to.frame(1) # 用索引就像喊"第二个套娃!"
driver.switch_to.frame(frame_element) # 直接拎着耳朵拽出来
# 重要的事情说三遍:操作完一定要回到现实世界!
driver.switch_to.default_content()
四、Selenium的"瑞士军刀"功能
1. 截图功能 - 测试失败的"犯罪现场照片"
from datetime import datetime
# 生成带时间戳的文件名,避免出现"截图(最终版)(真的最终)(最后修改).png"
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
driver.save_screenshot(f"oops_{timestamp}.png")
2. 验证码处理三大"歪门邪道"
| 策略 | 实现方式 | 适用场景 | 道德指数 |
|---|---|---|---|
| 走后门 | 让开发暂时关闭验证码 | 测试环境 | ★★★☆☆ |
| 伪造通行证 | 手动登录后盗取Cookie | 需要登录的测试 | ★★☆☆☆ |
| 雇佣外援 | 调用OCR识别服务 | 生产环境 | ★★★★☆ |
五、Selenium考点速记打油诗
等待别用sleep,智能轮询真香;
新窗总在最后面,句柄数组记心上;
Frame如进密室,default_content是紧急出口;
截图要带时间戳,验证码能免就免掉。
六、综合实战:一次完整的"驯兽"表演
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待那个害羞的按钮出现
shy_button = WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.ID,"play_hard_to_get"))
)
shy_button.click() # 点击后可能会弹出新窗口
# 切换到新开的窗口(记住:新窗口总是最后一个)
driver.switch_to.window(driver.window_handles[-1])
# 确保新窗口完全加载
WebDriverWait(driver,5).until(EC.title_contains("惊喜"))
# 拍张照留念免得它赖账
driver.save_screenshot("gotcha.png")
# 回到老家处理Frame里的表单
driver.switch_to.window(driver.window_handles[0])
driver.switch_to.frame("nested_form")
driver.find_element(By.NAME,"submit").click()
记住,在自动化测试的世界里,耐心和技巧同样重要。现在,拿起这些技巧,去驯服那些调皮的网页元素吧!如果失败了…至少你还有截图可以发朋友圈吐槽。
更多推荐



所有评论(0)