Selene vs Selenium为什么选择 Python 版本的 Selenide 进行 Web 测试【免费下载链接】seleneUser-oriented Web UI browser tests in Python项目地址: https://gitcode.com/gh_mirrors/sel/selene在自动化测试领域Selenium 无疑是最知名的工具之一但它的底层实现往往需要编写大量样板代码。而 Selene 作为 Python 版的 Selenide通过简化 API 和内置智能等待机制让 Web UI 测试变得前所未有的简单高效。本文将深入对比 Selene 与原生 Selenium 的核心差异揭示为什么越来越多的测试工程师选择 Selene 构建稳定可靠的自动化测试套件。 核心差异API 设计理念Selenium WebDriver 作为底层工具强调对浏览器的精确控制但这也意味着用户需要处理大量技术细节。而 Selene 的设计哲学是以用户为中心将常用操作封装为自然语言风格的 API大幅降低代码复杂度。1. 定位元素从繁琐到简洁Selenium 原生代码需要显式指定定位策略from selenium.webdriver.common.by import By driver.find_element(By.CSS_SELECTOR, #rsodiv)Selene 简化版直接支持 CSS/XPath 字符串from selene import browser browser.element(#rsodiv) # 自动识别为 CSS 选择器Selene 的智能选择器支持在 IDE 中自动补全减少语法错误2. 等待机制从手动到自动Selenium 中需要手动编写显式等待from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(driver, 4).until( presence_of_element_located((By.NAME, q)) )而 Selene 将等待逻辑内置到每个操作中browser.element(by.name(q)).should(be.blank)这种差异在复杂场景下尤为明显。当页面加载延迟时Selene 会自动等待条件满足而 Selenium 若未显式处理则会直接抛出异常。⚡ 性能对比效率与可靠性的平衡根据 Selene 项目的基准测试原生 Selenium 虽然在原始操作速度上略快但 Selene 通过智能缓存机制缩小了差距未缓存 Selene比原生 Selenium 慢 32-75%启用缓存后性能差距缩小到 10% 以内开发效率提升 2-3 倍减少 60% 代码量# Selene 缓存机制示例 query browser.element(by.name(q)) # 仅定义定位器 query.type(python selene) # 首次实际查找并操作 query.press_enter() # 复用已缓存的元素引用Selene 在保持代码简洁的同时通过智能缓存接近原生 Selenium 性能 代码可读性测试即文档Selene 的 API 设计遵循自然语言原则测试代码几乎可以作为功能文档直接阅读。以下是 Google 搜索场景的完整对比Selenium 实现约 25 行代码def test_finds_selene_webdriver_version(): driver.get(https://google.com/ncr) WebDriverWait(driver, 4).until( presence_of_element_located((By.NAME, q)) ) assert driver.find_element(By.NAME, q).get_attribute(value) driver.find_element(By.NAME, q).send_keys(github yashaka selene) driver.find_element(By.NAME, q).send_keys(Keys.ENTER) WebDriverWait(driver, 4).until( presence_of_element_located((By.CSS_SELECTOR, #rsodiv)) ) assert len(driver.find_elements(By.CSS_SELECTOR, #rsodiv)) 6 assert yashaka/selene in driver.find_elements( By.CSS_SELECTOR, #rsodiv )[0].text driver.find_elements(By.CSS_SELECTOR, #rsodiv)[0].find_element( By.CSS_SELECTOR, h3 ).click() WebDriverWait(driver, 4).until( title_contains(yashaka/selene) )Selene 实现约 10 行代码def test_finds_selene(): browser.open(https://google.com/ncr) query.should(be.blank) query.type(python selene).press_enter() results.should(have.size_greater_than_or_equal(6)) results.first.should(have.text(selene)) first_result_header.click() browser.should(have.title_containing(selene))Selene 的链式调用和智能提示让测试编写更加流畅️ Page Object 模式从繁琐到优雅Selene 的延迟定位特性彻底改变了 Page Object 的实现方式。传统 Selenium 只能存储定位器元组而 Selene 可以直接定义元素对象Selenium Page Objectclass GooglePage: def __init__(self, driver): self.driver driver self.query_locator (By.NAME, q) def search(self, text): self.driver.find_element(*self.query_locator).send_keys(text) self.driver.find_element(*self.query_locator).send_keys(Keys.ENTER)Selene Page Objectclass GooglePage: query browser.element(by.name(q)) results browser.all(#rsodiv) def search(self, text): self.query.type(text).press_enter()这种差异使得 Selene 的 Page Object 更加简洁同时保持了良好的封装性和可维护性。IDE 还能提供完整的自动补全支持Selene 的延迟元素特性让 Page Object 实现更加直观 实用功能超越基础测试Selene 内置了许多实用功能大幅简化常见测试场景1. 相对 URL 支持browser.config.base_url https://google.com browser.open(/ncr) # 自动拼接为 https://google.com/ncr2. 强大的条件断言results.should(have.size_greater_than_or_equal(6)) results.first.should(have.text(selene)) browser.should(have.title_containing(selene))3. 灵活的超时配置# 全局配置 browser.config.timeout 10 # 临时覆盖 browser.with_(timeout5).should(have.title(Selene))4. 元素集合操作# 获取所有结果文本 result_texts results.get(query.texts) # 过滤可见元素 visible_results results.filtered_by(be.visible) 快速开始安装与基础配置要开始使用 Selene只需通过 pip 安装pip install selene或使用 poetrypoetry add selene --allow-prereleases基础测试配置示例from selene import browser, by, be, have def test_basic_search(): browser.config.window_width 1200 browser.config.window_height 800 browser.open(https://google.com) browser.element(by.name(q)).should(be.blank) \ .type(selene python).press_enter() browser.all(#rsodiv).should(have.size_greater_than(5))从 PyCharm 直接运行 Selene 测试享受流畅的开发体验 总结何时选择 SeleneSelene 特别适合以下场景追求高可读性测试代码的团队需要快速上手的自动化测试新手处理动态内容的现代 Web 应用测试构建可维护的大型测试套件虽然原生 Selenium 提供了更多底层控制但在 90% 的测试场景中Selene 都能以更少的代码实现相同甚至更好的效果。它不是要取代 Selenium而是站在 Selenium 的肩膀上提供更优雅的测试开发体验。如果你厌倦了编写重复的等待代码和处理繁琐的元素定位不妨尝试 Selene——这个让 Web 测试回归简单本质的 Python 框架。要获取完整文档和更多示例请查看项目中的 docs/ 目录特别是 selene-quick-start-tutorial.md 和 selene-for-page-objects-guide.md。开始你的 Selene 之旅吧【免费下载链接】seleneUser-oriented Web UI browser tests in Python项目地址: https://gitcode.com/gh_mirrors/sel/selene创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考