《鼠标拖拽的奇幻漂流——Selenium自动化测试漫游指南》

一、鼠标拖拽的魔法原理

  1. 动作分解的艺术
    • 基础三连击:按住-移动-松手(像玩抓娃娃机一样简单)
    • 代码封装哲学:Selenium把复杂操作打包成"drag_and_drop"魔法咒语
    • 平台变形记:
    网页版:鼠标的华尔兹(PS图层拖动就是典型)
    手机版:手指的芭蕾舞(需要Appium这类特制舞鞋)
    在这里插入图片描述

二、四步召唤术详解

  1. 标准施法流程
    步骤 | 咒语示例 | 魔法解析
    —|—|—
    1.准备法器 | from selenium.webdriver import ActionChains | 召唤鼠标操控卷轴
    2.缔结契约 | action = ActionChains(driver) | 创建专属魔法傀儡
    3.绘制法阵 | action.drag_and_drop(起点,终点) | 标记传送门坐标
    4.发动魔法 | action.perform() | 最后别忘了念"急急如律令"!

  2. 咒语细节说明书
    • drag_and_drop(起点,终点):
    起点:想搬家的元素(比如愤怒的小鸟)
    终点:目的地坐标(比如猪猪堡垒)
    • 组合技:可以先"悬停观察"再"瞬间移动"
    在这里插入图片描述

三、实战魔法秀场

  1. 经典应用图鉴
    平台 | 魔幻场景 | 关键技术
    —|—|—
    PC端 | 在线装修设计(拖动沙发) | 需要DOM元素穿上"draggable"斗篷
    网页游戏 | 植物大战僵尸(放置向日葵) | 像素级定位要精准
    移动端 | 抖音上下滑动 | 需要TouchAction特技

  2. 红蓝方块大冒险

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()

在这里插入图片描述

验收标准:
红色方块是否成功穿越到蓝色区域(检查是否发生量子纠缠)

四、魔法事故处理司

  1. 施法前提条件
    • 元素是否获得"可拖动"许可证(查看HTML的draggable属性)
    • 坐标定位是否足够精确(建议使用XPath望远镜)

  2. 常见翻车现场
    事故现象 | 抢救方案
    —|—
    咒语失效 | 检查是否漏念perform()真言
    元素纹丝不动 | 查看是否被CSS定身术束缚
    手机端不响应 | 换用Appium的特制触控手套
    在这里插入图片描述

五、魔法学院毕业考试

  1. 三句真言
    “先找两扇门,再念搬运咒,最后要发动!”

  2. 重点考题
    知识点 | 难度 | 核心要诀
    —|—|—
    拖拽参数 | 🌟🌟 | 记住"先源后目标"的顺序
    元素搜寻 | 🌟🌟🌟 | 双定位就像找两把钥匙
    移动适配 | 🌟🌟🌟 | 需要框架护法加持

  3. 高阶修炼
    • 节奏控制:在咒语间加入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. 时间管理大师:可以精确设置等待上限,绝不浪费1毫秒
  2. 瞬间捕捉达人:元素一出现就立即"逮捕归案"
  3. 错误报告专家:超时会明确抛出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()

记住,在自动化测试的世界里,耐心和技巧同样重要。现在,拿起这些技巧,去驯服那些调皮的网页元素吧!如果失败了…至少你还有截图可以发朋友圈吐槽。

更多推荐