Pytest Selenium WebDriver退出

PyCharm中pytest运行Selenium测试报错排查指南 在软件测试领域,自动化测试是提升开发效率和保障软件质量的关键技术。其核心原理是通过脚本模拟用户操作,自动执行测试用例并验证结果。在Python技术栈中,pytest作为主流的测试框架,以其简洁的语法和强大的插件体系,为自动化测试提供了高效支持。结合Selenium进行Web UI自动化测试,能够有效验证Web应用的功能与交互。然而,在实际工程实践中,环境配置与工具链的协同工作常成为技术落地的瓶颈。例如,PyCharm IDE中运行pytest时,可能因测试发现规则、依赖冲突或WebDriver配置不当,导致 阅读详情

        在使用Python Selenium进行web自动化测试过程中,考虑整个测试框架中如何处理WebDriver的退出问题。问了ChatGPT两个问题,返回大段内容。以下整理了ChatGPT的回复,在后面的实践中进行核对修正。

----------------------------------------------分割线-------------------------------------------------------

        在 Selenium 自动化测试 中,如果程序因错误退出,webdriver 不一定会自动关闭,可能导致内存泄漏或未释放的资源。这是一个常见的问题,尤其是当程序意外中断时。

Selenium 遇到错误时 WebDriver 会退出吗?

        不会自动退出,除非你明确关闭它。

  • 如果脚本抛出异常 (如 ElementNotFound、TimeoutException 等),webdriver 不会自动调用 driver.quit()。
  • 这会导致浏览器进程 (如 Chrome/Firefox) 继续运行,并消耗系统内存和资源。

如何正确退出 WebDriver?

使用 driver.quit() 关闭 WebDriver

        在正常情况下,使用 driver.quit() 来关闭浏览器并释放内存:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# 执行一些操作
driver.quit()  # 关闭所有窗口,释放内存

使用 try...finally 确保退出

        如果程序意外中断,finally 子句总会执行,即使有异常抛出。
        示例:

from selenium import webdriver

driver = None
try:
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    # 可能的操作,存在风险
    element = driver.find_element("id", "non_existent_id")
except Exception as e:
    print(f"发生异常: {e}")
finally:
    if driver:
        driver.quit()

解释:

  • 即使脚本遇到异常,finally 子句仍会执行,调用 driver.quit() 来关闭浏览器。
  • 确保即使发生异常,WebDriver 也会正常退出。

 

使用 pytest 进行自动化测试

  • 在 pytest 中,可以使用 setup 和 teardown 方法确保 WebDriver 被关闭。
  • 这对于组织大规模的自动化测试套件特别重要。

pytest 中的例子

import pytest
from selenium import webdriver

@pytest.fixture(scope="function", autouse=True)
def driver():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_example(driver):
    driver.get("https://example.com")
    assert "Example" in driver.title

解释:

  • driver() 是一个 pytest fixture,会在每个测试用例前启动 WebDriver,并在用例结束后自动调用 driver.quit()。
  • 这样即使测试用例失败,浏览器也会自动关闭。

使用类级别的 driver (推荐)

通过使用 pytest.mark.usefixtures 和 类级别的 fixture,可以避免每个方法都传入 driver。

示例代码

import pytest
from selenium import webdriver

@pytest.fixture(scope="class")
def driver(request):
    driver = webdriver.Chrome()
    request.cls.driver = driver  # 绑定 driver 到测试类
    yield driver
    driver.quit()

@pytest.mark.usefixtures("driver")
class TestExample:
    def test_example_1(self):
        self.driver.get("https://example.com")
        assert "Example" in self.driver.title

    def test_example_2(self):
        self.driver.get("https://example.com/page2")
        assert "Page2" in self.driver.title

解释

  1. @pytest.fixture(scope="class"):

    • 使 driver 在类的整个作用范围内只启动一次,共享一个 driver 实例。
    • request.cls.driver = driver 将 driver 绑定到类的实例 (self.driver) 上。
  2. @pytest.mark.usefixtures("driver"):

    • 告诉 pytest 使用 driver fixture 作为类的前置条件,不需要在每个方法中显式传递 driver。
  3. self.driver:

    • 在测试方法中,你可以直接使用 self.driver,不需要每个方法中传入 driver。

🚀 优点

  • 只需在类的前面声明 @pytest.mark.usefixtures("driver"),不需要为每个方法传递 driver。
  • 减少样板代码,更整洁的代码结构。
  • 避免为每个测试用例重复创建和关闭 WebDriver(节省测试时间)。

进阶技巧:atexit 模块

如果你想确保即使脚本因未捕获的异常中断,也能关闭 WebDriver,可以使用 atexit。
示例:

import atexit
from selenium import webdriver

driver = webdriver.Chrome()

def close_browser():
    print("程序退出,关闭浏览器")
    driver.quit()

atexit.register(close_browser)

driver.get("https://example.com")
# 可能的风险操作
raise Exception("模拟的程序崩溃")

解释:

  • 当 Python 解释器意外中断(无论是错误、KeyboardInterrupt 还是脚本崩溃),atexit 将调用 close_browser(),确保 driver.quit() 执行。
  • 这种方式类似于 finally,但适用于整个脚本。

使用 autouse=True (自动启用)

如果不想为每个类都手动绑定 driver,可以使用 autouse=True 来自动启用 fixture。

示例代码

import pytest
from selenium import webdriver

@pytest.fixture(scope="function", autouse=True)
def driver():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_example_1():
    driver.get("https://example.com")
    assert "Example" in driver.title

def test_example_2():
    driver.get("https://example.com/page2")
    assert "Page2" in driver.title

解释

  1. autouse=True:

    • 自动启用 fixture,不需要在每个方法中显式传递 driver。
    • 在每个测试函数的上下文中,pytest 会自动创建并关闭 driver。
  2. driver() fixture:

    • 每个测试函数在开始时,都会自动获取一个 driver 实例,在函数结束后自动关闭。
  3. 无需传入 driver:

    • 你不需要在 test_example_1(driver) 中传入 driver,而是直接在测试函数中使用 driver。

优点

  • 最简单的实现方式,没有显式的依赖注入。
  • 适用于每个测试函数的 WebDriver 独立运行的场景。

注意

  • 由于 autouse=True 是全局启用的,所有测试都会加载 driver。如果有不需要 driver 的测试,也会创建 driver,从而浪费资源。
  • 如果希望只针对特定的类或特定的模块启用 driver,建议使用 scope="class" 和 @pytest.mark.usefixtures() 方式。

3. pytest hooks (pytest_sessionstart, pytest_runtest_setup)

如果想在整个会话范围内共享一个 WebDriver(例如,一个浏览器用于整个测试会话),可以使用 pytest_sessionstart 和 pytest_sessionfinish。

示例代码

import pytest
from selenium import webdriver

def pytest_sessionstart(session):
    """ 在测试会话开始时启动 WebDriver """
    session.driver = webdriver.Chrome()

def pytest_sessionfinish(session, exitstatus):
    """ 在测试会话结束时关闭 WebDriver """
    session.driver.quit()

@pytest.fixture(scope="function", autouse=True)
def driver(request):
    """ 在每个测试中都使用 session.driver """
    driver = request.session.driver
    yield driver

def test_example_1(driver):
    driver.get("https://example.com")
    assert "Example" in driver.title

def test_example_2(driver):
    driver.get("https://example.com/page2")
    assert "Page2" in driver.title

解释

  1. pytest_sessionstart 和 pytest_sessionfinish

    • pytest_sessionstart 在 pytest 启动前创建一个全局的 WebDriver。
    • pytest_sessionfinish 在 pytest 执行完成后,关闭 WebDriver。
  2. driver fixture

    • 在每个测试中,driver 是 request.session.driver 的引用,因此只会有一个全局的 WebDriver。
  3. 持久的 WebDriver

    • 在整个测试会话中,只启动一次浏览器,减少浏览器的反复创建和关闭,节省时间。

优点

  • 适用于长时间运行的测试会话,只需启动一次浏览器,节省资源。
  • 速度更快,因为每个测试都使用相同的 WebDriver,减少了重复启动的时间。

对比总结:三种方式对比

方法优势缺点
@pytest.mark.usefixtures简单、灵活,可控制作用范围每个类都要标注 @pytest.mark.usefixtures
autouse=True最简单、全自动,不需要传递 driver每个测试用例都自动创建和关闭 WebDriver,可能浪费资源
pytest hooks高效、单个 WebDriver,更节省时间WebDriver 在整个会话中保持打开,无法在中间重启

推荐的最佳实践

  1. 小型项目/临时脚本:使用 autouse=True,让 WebDriver 在所有测试中自动可用。
  2. 中型项目/团队协作:使用 @pytest.mark.usefixtures("driver") 和 类级的 driver,保持测试的可读性和灵活性。
  3. 大型项目/运行时间较长的脚本:使用全局 driver (pytest hooks),仅在整个会话中运行一个 WebDriver,节省运行时间。

示例:大型项目的最佳实践

import pytest
from selenium import webdriver

@pytest.fixture(scope="class")
def driver(request):
    driver = webdriver.Chrome()
    request.cls.driver = driver
    yield driver
    driver.quit()

@pytest.mark.usefixtures("driver")
class TestLogin:
    def test_valid_login(self):
        self.driver.get("https://example.com/login")
        assert "Login" in self.driver.title

    def test_invalid_login(self):
        self.driver.get("https://example.com/login")
        assert "Invalid" not in self.driver.title

@pytest.mark.usefixtures("driver")
class TestDashboard:
    def test_dashboard(self):
        self.driver.get("https://example.com/dashboard")
        assert "Dashboard" in self.driver.title

综合考虑,个人选择类级别使用@pytest.mark.usefixtures

可能的内存泄漏场景和解决方案

场景原因解决方法
程序崩溃未关闭浏览器异常中断,driver.quit() 未被调用使用 try...finally 确保退出
并行运行多个测试多个 WebDriver 竞争资源使用 pytest-xdist,并确保 driver.quit() 在 teardown 中执行
未关闭浏览器会话driver.close() 只关闭窗口,未退出使用 driver.quit() 代替
后台残留的进程系统中残留的 chromedriver 进程运行 pkill -f chromedriver 关闭后台进程
内存使用增加未释放的页面资源在长时间运行的脚本中,定期调用 driver.quit() 并重新启动 WebDriver

driver.close() 与 driver.quit() 的区别

方法操作场景
driver.close()关闭当前窗口 (不退出进程)当有多个窗口/Tab时,关闭当前窗口,但不会关闭 WebDriver 进程
driver.quit()关闭所有窗口并退出进程退出整个会话,释放所有资源,推荐在测试结束时使用

注意:如果仅调用 driver.close(),WebDriver 进程仍在运行,可能导致内存泄漏。
推荐总是使用 driver.quit() 以确保完全退出。

关键要点总结

  1. 确保 WebDriver 正确关闭,使用 driver.quit() 而不是 driver.close()。
  2. 使用 try...finally、pytest fixture、unittest teardown 等技术,确保即使发生错误,浏览器也能关闭。
  3. 使用 atexit.register(),即使脚本中断,也能执行退出逻辑。
  4. 在长时间运行的脚本中,定期调用 driver.quit() 以释放内存。
  5. 如果发现内存泄漏,请检查是否有后台的 chromedriver 进程,可用 pkill -f chromedriver 终止它们。

如果是类级别使用@pytest.mark.usefixtures,能确保用例异常退出时退出webdriver吗

是的,类级别使用 @pytest.mark.usefixtures 结合 scope="class" 和 yield 语法,可以确保即使用例异常退出,WebDriver 也会被关闭。

🔥 如何确保异常退出时退出 WebDriver?

  1. @pytest.mark.usefixtures:作用于整个类,在类开始前执行 fixture 的 setup,在类结束后执行 teardown。
  2. scope="class":确保整个类中的用例共享一个 WebDriver 实例。
  3. yield 语法:即使测试中出现异常,yield 之后的代码也会在 pytest 的teardown 阶段执行,确保 WebDriver 被关闭。
  4. pytest 的退出机制:pytest 保证了即使用例中断、异常退出、断言失败等情况,teardown 逻辑(yield 之后的部分)也会被执行。

🔥 完整实现示例

1️⃣ 推荐的实现方式

文件:conftest.py

import pytest
from selenium import webdriver

@pytest.fixture(scope="class")
def driver():
    """设置类级别的 WebDriver,只启动一次,类的所有用例共享这个实例"""
    print("\n[Setup] 启动 WebDriver")
    driver = webdriver.Chrome()
    driver.maximize_window()
    yield driver  # 用例执行完成后,会执行 yield 之后的部分
    print("\n[Teardown] 关闭 WebDriver")
    driver.quit()

文件:test_example.py

import pytest

@pytest.mark.usefixtures("driver")
class TestExample:
    """类级别使用 driver,每个用例共享一个 driver 实例"""
    
    def test_google_search(self, driver):
        """测试 Google 搜索"""
        driver.get("https://www.google.com")
        assert "Google" in driver.title  # 假设这里断言失败,driver.quit() 仍会执行

    def test_bing_search(self, driver):
        """测试 Bing 搜索"""
        driver.get("https://www.bing.com")
        assert "Bing" in driver.title  # 这里用例会正常通过

执行效果

运行 pytest -s test_example.py,输出类似以下内容:

[Setup] 启动 WebDriver

test_example.py::TestExample::test_google_search 
  (页面打开,Google 未找到,断言失败)
[Teardown] 关闭 WebDriver

test_example.py::TestExample::test_bing_search 
  (页面打开,Bing 加载成功)

关键点解读

  1. WebDriver 只启动一次

    • 在 TestExample 中,driver 只在 setup_class 中启动一次。
  2. WebDriver 在类结束后关闭

    • 即使 test_google_search 失败,driver.quit() 也会在类的 teardown 阶段被执行。
  3. 作用范围是整个类

    • scope="class" 作用于整个类的范围,同一个 driver 实例被 TestExample 中的所有用例共享。
  4. @pytest.mark.usefixtures 和 yield 确保稳定性

    • 即使中途用例失败(比如 test_google_search 中的断言失败),driver.quit() 也会在类 teardown 阶段运行。

常见问题与解答

1️⃣ 如何确保 WebDriver 在类结束时关闭?

  • 通过 scope="class" 和 yield 机制,确保不管测试中途如何中断,在类级别 teardown 阶段,driver.quit() 都会被调用。
  • 关键点在于:
yield driver  # 控制权交给测试用例
driver.quit()  # 用例结束后执行 teardown

如果类中用例过多,如何确保每个用例都可以正常使用 driver?

  • 使用 @pytest.mark.usefixtures("driver"),确保整个类中的每个用例都可以访问共享的 driver 实例。
  • 如果不想使用 @pytest.mark.usefixtures,也可以直接将 driver 作为类的class attribute。

python

复制代码

class TestExample:
    driver = None  # 将 driver 存储为类属性

    @classmethod
    def setup_class(cls):
        cls.driver = webdriver.Chrome()

    @classmethod
    def teardown_class(cls):
        cls.driver.quit()

    def test_google_search(self):
        self.driver.get("https://www.google.com")
        assert "Google" in self.driver.title

如果用例中抛出异常,driver.quit() 还会执行吗?

  • 是的!
  • pytest 机制总会在用例结束后,回到 yield 语句的 teardown 部分。
  • 例如,如果 test_google_search 抛出 AssertionError,driver.quit() 仍会被执行。
  • '

@pytest.mark.usefixtures 和 autouse=True 的区别?

用法生效范围是否需要手动传 driver自动调用
@pytest.mark.usefixtures类或方法❌ 不需要❌ 不自动生效
autouse=True类或方法❌ 不需要✅ 自动生效
  • @pytest.mark.usefixtures 作用于类或方法,需要显式声明 driver 作为参数。
  • autouse=True 作用于所有方法和类,无需显式传入 driver。

🔥 最佳实践

✅ 方法 1:@pytest.mark.usefixtures

  • 适用于类级别的 driver 共享,每个用例都共享一个 driver,用例结束后,driver 会被关闭。
  • 使用如下:
@pytest.mark.usefixtures("driver")
class TestExample:
    def test_1(self, driver):
        driver.get("https://example.com")

方法 2:autouse=True

  • 如果不希望每次都写 @pytest.mark.usefixtures,可以直接使用 autouse=True。
  • 示例:

@pytest.fixture(scope="class", autouse=True)
def driver():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

在这种情况下,不需要在每个测试类上使用 @pytest.mark.usefixtures,driver 会被自动激活。

方法 3:类级别的 setup/teardown

  • 如果不想依赖 pytest 的 fixture,直接用类的 setup_class 和 teardown_class。
class TestExample:
    driver = None  # 将 driver 存储为类属性

    @classmethod
    def setup_class(cls):
        cls.driver = webdriver.Chrome()

    @classmethod
    def teardown_class(cls):
        cls.driver.quit()

    def test_1(self):
        self.driver.get("https://example.com")

总结

方法控制范围关闭 driver 机制是否自动关闭 driver
@pytest.mark.usefixtures + scope="class"类级别teardown 在 yield 之后运行✅ 是的 (不管用例失败与否)
autouse=True全局生效pytest 自动控制✅ 是的 (不管用例失败与否)
类的 setup_class/teardown_class类级别teardown_class 始终运行✅ 是的 (不管用例失败与否)

🚀 推荐的实现

如果你要确保不管用例失败、断言失败、异常退出,driver.quit() 也会被调用,建议:

  1. 使用 @pytest.mark.usefixtures 和 scope="class" 来控制 driver 的生命周期。
  2. 通过 yield 确保用例结束后调用 driver.quit()。
  3. 使用 autouse=True 可进一步简化代码,不必传入 driver 参数。
webdriver_manager:自动化管理Selenium驱动,告别版本匹配烦恼 在软件开发和测试领域,环境配置是开发者面临的高频痛点,尤其是在进行Web自动化测试时。Selenium作为主流的浏览器自动化工具,其核心依赖于特定版本的浏览器驱动(如ChromeDriver),手动管理这些驱动常导致版本不匹配、下载繁琐等问题。webdriver_manager库通过智能探测本地浏览器版本、自动下载匹配的驱动并缓存,实现了驱动管理的自动化。其原理基于版本映射和缓存机制,技术价值在于将开发者从重复的配置工作中解放,提升项目可维护性和团队协作效率。应用场景广泛覆盖单机脚本、Pytest测试框架、 阅读详情

相关推荐

WebDriver Manager:自动化管理浏览器驱动,彻底告别Selenium版本兼容烦恼

在软件测试自动化领域,浏览器驱动管理是Selenium等工具实现Web自动化操作的基础环节。其核心原理在于通过驱动程序作为中间层,实现测试脚本与不同浏览器内核之间的指令翻译与通信。这项技术的核心价值在于解决了浏览器频繁更新导致的驱动版本不匹配问题,从而保障了自动化测试套件的稳定性和可维护性。在实际应用场景中,无论是开发本地调试、团队协作,还是CI/CD流水线的持续集成,自动化的驱动管理都至关重要。本文聚焦的WebDriver Manager工具,正是针对这一痛点,通过自动探测浏览器版本、智能匹配并下载对应驱

weixin_33827590的博客 354

解决Selenium WebDriver 加载页面时出现浏览器闪退

webdrive。

m0_59729008的博客 5841

Python自动化测试工具库实战指南:从pytest到Selenium的完整技术栈

自动化测试是现代软件工程保障质量与效率的核心实践,其本质是通过脚本模拟用户操作,对软件功能进行系统化验证。其核心原理在于将重复、易错的手工测试转化为可重复执行、快速反馈的代码,从而在持续集成与交付流程中实现快速的质量门禁。从技术价值看,一套设计良好的自动化测试体系能显著提升测试覆盖率、加速回归测试、并及早发现缺陷,是支撑敏捷开发和DevOps的关键环节。在应用场景上,自动化测试广泛覆盖单元测试、接口测试、UI测试及性能测试等多个层次。本文聚焦于Python技术生态,深入解析如何将pytest测试框架与Sel

weixin_34331102的博客 416

python的UI自动化框架+项目实例

cells.insert(1, html.th('Description')) # 表头添加Description。cells.insert(1, html.td(report.description)) #表头对应的内容。#pytest.main() # 遍历相同目录下的所以test开头的用例。cells.pop(-1) # 删除link列。cells.pop(-1) # 删除link。#url是固定的获取鉴权接口。一、熟悉项目的测试框架的整体目录。"""测试页面"""1、编写main.py。

学习笔记 1111

Selenium3+Pytest+Allure工业级落地实战:产线稳定性调优指南

Web UI自动化测试中,Selenium、Pytest与Allure的组合并非简单堆叠,而是涉及浏览器驱动管理、测试生命周期控制与报告数据融合的系统工程。Selenium3虽已停止维护,但其在企业内网环境中的兼容性与稳定性仍具不可替代价值;Pytest的fixture机制决定了资源复用粒度与异常清理可靠性;Allure则通过step嵌套、attachment绑定和severity分级,将原始执行日志转化为可定位的问题线索。三者协同的关键在于显式等待替代隐式等待、module级driver复用、Allure

weixin_34290096的博客 416

告别手动管理Selenium驱动:webdriver_manager自动化解决方案详解

在Web自动化测试和爬虫开发中,浏览器驱动管理是常见的痛点。Selenium等工具需要与特定版本的浏览器驱动严格匹配,手动下载和配置不仅繁琐,更在团队协作和CI/CD环境中引发环境不一致问题。webdriver_manager库通过自动化机制解决了这一难题,其核心原理是自动检测本地浏览器版本,从官方仓库下载匹配的驱动并缓存。这项技术显著提升了自动化项目的稳定性和可维护性,实现了从人工运维到声明式配置的转变。在Selenium自动化测试和pytest测试框架的应用场景中,它能无缝集成,支持Chrome、Fir

weixin_30888413的博客 349

测试面试必备:Web自动化测试中WebDriver如何开启和退出浏览器

在Web自动化测试中,WebDriver是最核心的组件之一,它提供了与浏览器交互的接口。正确开启和退出浏览器是自动化测试的基础操作,也是确保测试稳定性和资源管理的关键环节。本文将详细介绍如何使用Java语言通过WebDriver启动和关闭浏览器,并辅以流程图帮助理解整个过程。

qq_58299462的博客 1124

WebDriver Manager:自动化管理Selenium浏览器驱动的完整指南

在Web自动化测试中,浏览器驱动管理是确保测试脚本稳定运行的基础环节。其核心原理在于通过版本映射机制,确保WebDriver与浏览器版本间的精确匹配,从而避免因版本不兼容导致的测试失败。这一技术的核心价值在于将繁琐的手动维护工作自动化,显著提升测试环境的搭建效率和一致性。在实际应用场景中,它尤其适用于持续集成/持续部署(CI/CD)流水线、多浏览器兼容性测试以及团队协作开发等场景。通过自动检测本地浏览器版本、智能下载匹配驱动并配置环境,WebDriver Manager工具彻底解决了传统手动管理模式下版本匹

weixin_34274029的博客 358

软件测试笔记|web自动化测试|Web 自动化测试中,WebDriver 如何开启和退出一个浏览器?

/ 只关闭当前窗口,如果只有一个窗口,效果和 quit 类似,但不完全相同。quit 会确保浏览器进程完全退出,而 close 可能在某些情况下不会完全退出浏览器进程。// 创建 ChromeDriver 实例,开启 Chrome 浏览器。// 创建 ChromeDriver 实例,开启 Chrome 浏览器。// 关闭所有窗口并退出浏览器驱动。// 关闭所有窗口并退出浏览器驱动。driver.quit() # 关闭所有窗口并退出浏览器驱动。driver.close() # 只关闭当前窗口。

阳哥精心梳理软件测试知识,从基础理论到实战技巧,为你打开软件测试的精彩世界,助力你的测试之路更顺畅 670

Python自动化测试神器:Webdriver Manager自动管理浏览器驱动

在Web自动化测试和爬虫开发中,浏览器驱动管理是一个常见且棘手的技术挑战。其核心原理在于驱动作为Selenium等工具与真实浏览器之间的通信桥梁,必须与浏览器版本严格匹配。由于浏览器频繁自动更新而驱动不会,导致版本不匹配问题频发,严重影响脚本的稳定性和可维护性。这一问题的技术价值在于通过自动化驱动管理,可以显著提升测试脚本的可靠性和团队协作效率,减少环境配置带来的时间浪费。在应用场景上,无论是Web自动化测试、数据爬取还是RPA流程自动化,都需要稳定的浏览器环境支持。本文介绍的Webdriver Manag

weixin_33709364的博客 310

Kindle电子书DRM破解全攻略:从下载到转换的完整流程(含最新DeDRM插件配置)

本文详细介绍了2025年最新Kindle电子书DRM移除的完整实战流程。针对亚马逊加密机制的升级,文章重点讲解了如何配置最新的DeDRM插件、从新版Kindle客户端提取密钥,并利用Calibre完成电子书的解密与格式转换,为个人备份提供了一套可行的解决方案。

weixin_29279153的博客 1737

selenium - webdriver的常用操作

说明:在项目中不是所有的小窗口都是以下三种对话框,有些弹窗并非浏览器的alert 窗口,而是html元素,这种对话框只需要按照常规的定位页面元素进行处理即可,若不是html元素,则使用如下方式处理。设置指定宽高的用途:我们一般会通过PC浏览器访问手机网站,通过该方式即可调整浏览器为手机屏幕的宽、高,可以发现一些显示问题。3、prompt 提示框 – 在confirm基础上增加了文本输入框。2、confirm 确认框 – 在alert的基础上增加了取消按钮。待后面使用到时再学习。

XiYang的博客 2663

RK3568平台(KBuild篇)KBuild编译体系

从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。

weixin_49303682的博客 349

Selenium+Pytest+POM

创建一个对象,就会执行它的 init 方法1、执行 Maintest_login4、执行 LoginPage 页的方法5、执行后置:print(“关闭浏览器”)未完待续。。。。。。

iOS_HC的博客 1346

YOLOv8【第十章:多任务扩展深度篇·第18节】不规则工业缺陷分割——针对划痕、裂纹的 Seg 模型调优!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 3981

采用了fluent模拟了平壁面结霜过程。udf,很经典,可以试试。

利用该模型作为FLUENT中的源项,模拟了在局部冷却下冷表面上的霜形成,以预测霜的形态、温度分布和霜的重量,结果与实验结果吻合良好。结果显示,霜首先围绕冷却块形成,然后逐渐向其他方向扩展,冷却块上方的霜密度最大。随着时间的推移,平均霜厚度逐渐增加,生长速率减慢,而平均霜密度随增长速率变快而增加。相变传递微观过程与机理、蒸发及冷凝换热、强化传热、高效传热管、热泵、制冷、节水节能新技术、电子元器件冷却、余热回收及梯级利用等。udf,很经典,可以试试。工程热物理、空调、热能、低温制冷、化工、物理等。

qq_15963745的博客 922

WebDriver Manager:自动化管理浏览器驱动,提升Selenium测试效率

在Web自动化测试中,浏览器驱动管理是确保测试脚本稳定运行的基础环节。其核心原理在于自动检测本地浏览器版本,并通过查询云端元数据匹配兼容的驱动版本,实现驱动的自动下载与缓存管理。这一机制的技术价值在于显著提升了测试环境的可移植性和维护效率,解决了因浏览器版本更新导致的驱动不匹配问题。在工程实践中,它广泛应用于持续集成流水线、多浏览器兼容性测试等场景,通过统一接口简化了Chrome、Firefox等不同浏览器的驱动管理。本文以Selenium测试为例,深入解析WebDriver Manager如何通过自动化流

weixin_30764771的博客 433

【Docker】常见容器问题解决#OCI runtime create failed: container_linux.go:349: starting container process

ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/data/docker-compose/n

liu_chen_yang的博客 5528

chrome webdriver_使用Python和Chrome安装Selenium WebDriver

什么是WebDriver?WebDriver是用于与实时Web浏览器进行交互的可编程界面。它使测试自动化能够打开浏览器,发送点击,键入键,刮擦文本并最终干净地退出浏览器。WebDriver界面是W3C建议书。WebDriver标准的最受欢迎的实现是SeleniumWebDriver,它是免费和开放源代码。WebDriver具有多个组件:语言绑定。诸如Selenium WebDriver...

weixin_39664585的博客 773

自动驾驶算法-滤波器系列(三)——不同运动模型(CV、CA、CTRV、CTRA)的建模和推导

CV & CA & CTRV & CTRA1. CV模型2. CA模型3. CTRV模型4. CTRA模型 1. CV模型 2. CA模型 3. CTRV模型 4. CTRA模型

weixin_41480034的博客 2万+

车载诊断架构 --- 车载ECU开发中DTC数量与芯片存储能力的关系及应对策略

本文探讨了汽车电子系统中ECU存储DTC故障码的容量问题及解决方案。作者作为汽车电子工程师,针对台架测试中遇到的DTC存储超限案例展开分析,指出随着汽车智能化发展,ECU需处理的DTC数量激增与芯片存储能力有限的矛盾。文章详细介绍了DTC的存储需求、ECU支持数量与芯片容量的关系,并提出应对策略,通过实际案例验证了方案的可行性。最后强调在ECU开发中需合理分配存储资源,确保关键故障信息不丢失。

Soly_kun的博客 87

pytest与Selenium实战:构建稳定高效的Web UI自动化测试框架

Web UI自动化测试是软件质量保障的关键环节,其核心原理是通过程序模拟用户操作,对Web应用界面进行功能验证。这项技术能显著提升测试效率,实现快速回归验证,并确保测试过程的可重复性。在工程实践中,pytest测试框架以其简洁的语法、强大的Fixture机制和灵活的插件体系,成为组织和管理自动化用例的首选工具。结合Selenium提供的浏览器操控能力,开发者可以构建出稳定、易维护的自动化测试解决方案。本文聚焦于如何将pytest与Selenium深度整合,通过引入Page Object模型提升代码可维护性,

weixin_30555515的博客 409

反激电源及其变压器计算与绕制

本内容以一个宽电压输入 24V3A 输出的 72W 反激电源为例来计算电路的各个参数和器件选型,包含反激变压器的计算与绕制方法。

让你爱上电路设计 1935

Selenium WebDriver 自动化测试与爬虫实战:从环境配置到高级技巧

自动化测试和Web数据抓取是现代软件工程与数据分析中的关键技术,旨在通过程序模拟用户操作,提升效率与准确性。其核心原理在于通过标准协议(如W3C WebDriver)建立客户端脚本与真实浏览器内核之间的通信桥梁,从而实现对网页元素的精准定位与交互。这项技术的价值在于能够执行端到端的UI测试、稳定抓取动态网页数据,并实现重复性Web操作的自动化,广泛应用于测试开发、爬虫工程及办公自动化等场景。本文聚焦于Selenium WebDriver这一主流工具,深入解析其元素定位、等待机制等核心操作,并针对环境配置、常

weixin_33726318的博客 348

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python+selenium工具UI自动化全功能介绍(包括工具本身及配合RobotFramework框架和pytest框架应用)

Selenium是一个用于Web应用程序的自动化测试工具,支持多平台(Windows、Linux和Mac)、多浏览器(IE,Mozilla Firefox、Safari、Google Chrome、Opera、Edge)、多语言(Java、Python、C#、JavaScript、Ruby),能够让测试脚本像真实用户一样在浏览器中操作。核心组件:Selenium IDE:Selenium Suite下的开源Web自动化测试工具,是Firefox的一个插件,具有记录和回放功能,无需编程即可创建测试用例。

kymppcds的博客 2501

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从零搭建Python+Selenium+Pytest自动化测试框架:架构设计与工程实践

自动化测试是软件工程中保障质量、提升效率的关键实践,其核心在于通过脚本模拟用户操作,实现测试用例的自动执行与验证。其原理在于将重复、可预测的测试任务交由程序处理,从而释放人力,实现快速反馈。在敏捷开发与DevOps背景下,自动化测试的技术价值尤为凸显,它不仅是持续集成/持续部署(CI/CD)流水线的重要环节,更是实现高质量快速交付的基石。应用场景广泛覆盖Web UI测试、接口测试、移动端测试等领域。本文聚焦于Web UI自动化测试,深入探讨如何基于Python、Selenium与Pytest等技术栈,从零开

weixin_33738982的博客 377

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Selenium如何操作下拉框
下一篇: Appium自动化测试如何判断App是否异常退出
Free Tester
博客等级 码龄2年 121粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值