【问题标题】:Swtich browsers in Karate在空手道中切换浏览器
【发布时间】:2021-01-22 08:10:14
【问题描述】:

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

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

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

e2e测试sn-p如下:

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


    【解决方案1】:

    我会简化您的方案,不要同时打开 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 网格?

    【讨论】:

    • 感谢您的意见@Peter。将尝试您上面提到的内容并在此处更新以造福其他用户。
    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多