如何在同一浏览器会话中运行多个Karate UI自动化场景?
解决Karate UI自动化复用浏览器会话的问题
要让多个场景共用同一浏览器会话,核心是只初始化一次浏览器,避免每个场景(包括Background)重复启动新会话。以下是具体实现步骤:
关键修改点
- 移除Background中重复执行的浏览器初始化代码,改用
callonce确保初始化逻辑仅运行一次 - 在所有场景执行完毕后,手动关闭浏览器或配置自动关闭
修改后的Feature示例
Feature: Verify Search Text field on Google Home Page # 仅初始化一次浏览器会话 * def initBrowser = callonce """ * configure driver = { type: 'chrome', timeout: 5000 } * driver 'https://www.google.com/' * driver.maximize() """ Background: * def baseUrl = 'https://www.google.com/' * waitForUrl(baseUrl) * delay(1000) Scenario Outline: Enter Search Text <searchText> * clear("//textarea[@name='q']") * input("//textarea[@name='q']", '<searchText>') And delay(5000).screenshot() Examples: | searchText | | Amazon | | Flipkart | Scenario: Verify Privacy Page Link is clickable * click("//a[text()='Privacy']") And delay(5000).screenshot() # 所有场景执行完成后关闭浏览器 * driver.quit()
补充说明
callonce是Karate的核心关键字,会确保其包裹的代码在整个Feature执行周期内仅运行一次,完美适配多场景复用会话的需求- 如果需要跨Feature复用浏览器会话,可以把初始化逻辑抽成独立的
.feature文件,通过callonce read('classpath:init-browser.feature')调用 - 最后必须手动调用
driver.quit()或配置configure driver = { shutdown: true },否则浏览器会一直保持打开状态
内容的提问来源于stack exchange,提问作者Aakash Jain
相关产品推荐
相关产品推荐

