
1. Selenium自动化测试函数深度解析作为Web自动化测试领域的黄金标准工具Selenium的函数库在实际项目中发挥着中枢神经作用。在上一期我们探讨了基础定位和页面操作函数后这次将重点剖析那些容易被忽视却至关重要的函数方法。以Python语言为例结合Edge浏览器的最新特性我将分享在电商平台自动化测试中积累的实战经验。注意本文所有代码示例基于Selenium 4.8和Edge 108版本部分函数在旧版本可能不兼容1.1 函数分类与调用逻辑Selenium的函数体系可分为三大类驱动控制函数管理浏览器生命周期如quit()、close()元素定位函数支持XPath、CSS等8种定位方式如find_element()系列交互操作函数模拟用户行为如click()、send_keys()# 典型函数调用链示例 driver webdriver.Edge() driver.get(https://example.com) # 驱动控制 search_box driver.find_element(By.NAME, q) # 元素定位 search_box.send_keys(selenium Keys.RETURN) # 交互操作1.2 新版Edge的扩展管理函数针对热词中python selenium要在edge启用一个扩展程序的需求微软Edge提供了专属函数from selenium.webdriver.edge.options import Options options Options() options.add_extension(path/to/extension.crx) # 加载本地扩展 options.use_chromium True # 必须启用Chromium内核踩坑记录Edge扩展安装后需要手动处理权限弹窗建议添加options.add_argument(--disable-extensions-file-access-check)2. 核心交互函数进阶用法2.1 输入操作函数优化send_keys()函数存在三个高阶用法组合键操作通过Keys类实现快捷键from selenium.webdriver.common.keys import Keys element.send_keys(Keys.CONTROL a) # 全选文件上传直接发送文件路径upload driver.find_element(By.XPATH, //input[typefile]) upload.send_keys(/Users/test/example.png) # 绝对路径输入延迟模拟人性化输入节奏from time import sleep for char in selenium: search_box.send_keys(char) sleep(0.3) # 300ms间隔2.2 鼠标动作链函数ActionChains类提供的函数能实现复杂交互from selenium.webdriver.common.action_chains import ActionChains actions ActionChains(driver) actions.move_to_element(menu).pause(1).click(hidden_submenu).perform()典型应用场景三级级联菜单操作拖拽滑块验证码画布绘图操作实战技巧pause()参数单位是秒建议复杂操作间添加0.5-1秒间隔3. 等待机制函数详解3.1 显式等待函数组合WebDriverWait配合expected_conditions的黄金组合from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait WebDriverWait(driver, 10, poll_frequency0.5) element wait.until( EC.visibility_of_element_located((By.ID, dynamic-element)) )常用条件判断函数函数名作用描述presence_of_element_located元素存在于DOMelement_to_be_clickable元素可点击状态text_to_be_present_in_element元素包含特定文本3.2 自定义等待函数通过lambda实现复杂等待条件wait.until(lambda d: len(d.find_elements(By.CLASS_NAME, item)) 5)这种写法特别适合异步加载内容检查分页数据加载等待动态表格行数验证4. JavaScript执行函数进阶4.1 execute_script深度应用driver.execute_script( let element arguments[0]; element.style.border 3px solid red; return element.getBoundingClientRect(); , target_element)典型使用场景修改元素样式调试定位获取DOM属性如滚动位置执行原生JS事件4.2 异步脚本处理Edge新版支持execute_async_scriptscript let callback arguments[arguments.length - 1]; fetch(https://api.example.com).then(res callback(res.json())); result driver.execute_async_script(script)5. 特殊场景函数解决方案5.1 文件下载函数重载Edge需特殊配置下载路径params { behavior: allow, downloadPath: /path/to/downloads } driver.execute_cdp_cmd(Page.setDownloadBehavior, params)5.2 弹窗处理函数# 获取弹窗文本 alert driver.switch_to.alert print(alert.text) # 处理认证弹窗 driver.get(https://username:passwordexample.com)6. 性能优化函数组6.1 页面加载策略控制from selenium.webdriver.edge.options import Options options Options() options.page_load_strategy eager # 可选normal/eager/none三种模式对比normal等待全部资源加载默认eagerDOM完成即继续提升速度none不等待适合SPA应用6.2 网络请求拦截通过DevTools函数实现driver.execute_cdp_cmd(Network.enable, {}) driver.execute_cdp_cmd( Network.setBlockedURLs, {urls: [*.adservice.com]} )7. 函数调试与异常处理7.1 元素状态检查函数def is_element_present(driver, locator): try: driver.find_element(*locator) return True except NoSuchElementException: return False7.2 智能重试机制from tenacity import retry, stop_after_attempt retry(stopstop_after_attempt(3)) def safe_click(element): try: element.click() except StaleElementReferenceException: element relocate_element() raise8. 函数最佳实践总结命名规范采用动作_对象格式如click_submit_button()参数设计必选参数在前可选参数在后带默认值异常处理明确捕获NoSuchElementException等特定异常日志记录关键步骤添加logging.info()输出性能统计用time.perf_counter()记录关键操作耗时最后分享一个真实案例在某金融系统测试中通过重写find_element()函数增加自动截图功能使元素定位失败时的排查效率提升70%。这提醒我们合理封装基础函数能显著提升框架的健壮性。