首页 > 解决方案 > 空手道中的 Swtich 浏览器

问题描述

我是空手道 UI 自动化的新手,遇到了一个问题,需要有关如何进行的建议。

我有一个测试场景,它是一个 3 步过程

  1. 用户 A 登录并填写表格
  2. 用户 B 使用其他浏览器登录并批准该应用程序
  3. 步骤1中的用户A(已经登录)可以看到他的申请被接受了

e2e 测试片段如下:

Scenario: E2E - User agreement acceptance
   #1 USER A logs in and fills agreement form
     When def userA_create_agreement = call read('./../Features/CreateAgreement.feature') { shared_agrname: '#(SharedAgreementName)' }

   #2 USER B retrieve above agmt and approves it 
    When def userB_read_agreement = call read('./../Features/ReadAndApprove.feature') { shared_agrname: '#(SharedAgreementName)' }
    
   #3 USER A confirms acceptance
    When def userA_confirm_acceptance = call read('./../Features/ConfirmAcceptance.feature') { shared_agrname: '#(SharedAgreementName)' }

每个“调用”功能文件 - CreateAgreement.feature、ReadAndApprove.feature、ConfirmAcceptance.feature 都有以下背景部分

Background: 
    * configure driver = { type: '#(drivertype)', executable: '#(driverpath)'}

Scenario: 
    Given driver agreementmanager_url
    .....
    .....

第 1 步和第 3 步的驱动程序类型和驱动程序路径是 chrome,第 2 步是 Firefox。用户 A 和 B 不能同时使用同一个浏览器登录。这是设计使然。

目前使用上述方式,每个步骤都会调用一个新的浏览器实例并正确运行测试,因为我每次都在每个调用的功能文件中调用驱动程序。我正在寻找的是能够在浏览器之间切换并继续运行,而无需在不需要时在每个功能文件中调用新实例。

所以

Step 1 - User A logs in and registers using Chrome
Step 2 - User B logs in and approves using Firefox
Step 3 - Switches back to browser instance of step 1 with User A(who is already logged), views the update of acceptance.

我想知道这是否可以使用空手道?我阅读了文档,我们有 switchPage() 可以在同一浏览器的选项卡之间切换,但是有没有一种方法可以切换浏览器而无需重新启动新实例并再次登录?

任何关于如何实现这一目标的建议或帮助都会非常有帮助。

标签: karate

解决方案


我会简化你的场景,不要同时打开 2 个浏览器。你可以试试这个应该从 Chrome 切换到 Firefox 的序列:

* configure driver = { type: 'chrome' }
* driver 'https://github.com/login'
* driver.quit()
* configure driver = { type: 'geckodriver' }
* driver 'https://google.com'

所以规则是你quit()是否可以在流程中启动一个新的浏览器(0.9.6 起)。

如果您真的坚持要打开 Chrome,也许您可​​以尝试使用 Java API,它可以让您获得更多控制权:https ://github.com/intuit/karate/tree/master/karate-core#chrome-java-api

但是你真的达到了一个成熟的水平,你想要测试的所有其他东西都可以顺利运行吗:)

无论如何,要从第一个浏览器模拟“登录”上下文 - 您需要做的就是获取 cookie 值并在稍后的测试中重新创建 cookie。这就是我推荐的测试策略,而不是杂耍浏览器。在考虑从 Chrome 切换到 FireFox 之前,我也会先让这个流程工作,例如,我不确定你是否可以让它在 Docker 或 CI 中工作。还是您使用的是 Selenium 网格?


推荐阅读