Karate 在空手道用户界面场景中处理基本身份验证

Karate 在空手道用户界面场景中处理基本身份验证,karate,Karate,我刚刚开始实现空手道用户界面(v0.9.5)。我们已经使用空手道实现了api测试,它工作得非常好 遵循本页上的HTTP基本身份验证策略-基本身份验证处理适用于api测试。我设置了一次HTTP头并运行了所有api测试。 现在,对于UI测试,我打开的URL将弹出基本身份验证弹出窗口,如下所示: 所以我认为我可以使用与api测试相同的策略来处理这个问题。在我的功能文件的后台部分,我调用了进行身份验证的功能文件,并设置了如下标题: Feature: Login test Background:

我刚刚开始实现空手道用户界面(v0.9.5)。我们已经使用空手道实现了api测试,它工作得非常好

遵循本页上的HTTP基本身份验证策略-基本身份验证处理适用于api测试。我设置了一次HTTP头并运行了所有api测试。 现在,对于UI测试,我打开的URL将弹出基本身份验证弹出窗口,如下所示:

所以我认为我可以使用与api测试相同的策略来处理这个问题。在我的功能文件的后台部分,我调用了进行身份验证的功能文件,并设置了如下标题:

Feature: Login test

  Background:
    # Authorise via api
    * def login = callonce read('classpath:common/headers/admin-headers.feature')
    * def uiCookie = { name: 'SESSION', value: '#(login.userAuthInfo.authSession)', domain: 'test.internal.mysite.com' }
    * configure driver = { type: 'chrome', cookie: '#(uiCookie)' }

  Scenario: Test login
    Given driver 'https://test.internal.mysite.com/names'
调用功能文件以设置标题(admin headers.feature)。此功能文件在管理员用户通过karate-config.js登录后获取令牌。然后将令牌与Base64编码的基本身份验证一起分配给调用headers.js的头。Base64用户和密码作为maven参数输入,并通过KarateConfig变量读取

(/admin headers.feature)

用于将Auth和Cookie返回到上述功能文件(/headers.js)的js代码

我的UI测试功能文件(/UI test.feature):

运行上述功能文件仍会显示auth弹出窗口

然后,我尝试在初始化驱动程序时设置cookies(我认为这可能不是正确的方法?),如下所示:

Feature: Login test

  Background:
    # Authorise via api
    * def login = callonce read('classpath:common/headers/admin-headers.feature')
    * def uiCookie = { name: 'SESSION', value: '#(login.userAuthInfo.authSession)', domain: 'test.internal.mysite.com' }
    * configure driver = { type: 'chrome', cookie: '#(uiCookie)' }

  Scenario: Test login
    Given driver 'https://test.internal.mysite.com/names'
上述方法也不起作用。我在这里做错了什么?弹出窗口不断出现,因为在初始化驱动程序并打开指定url时未设置cookie


非常感谢您的帮助。

我认为您提出了一个非常好的功能请求,即
配置驱动程序
也应该获取cookies,以便您可以导航到页面并一次性设置cookies,我打开了一个功能请求:

因此,请尝试以下顺序,参考文档了解
cookie()


现在它应该可以工作了

我尝试了上述方法。我用默认驱动程序chrome运行了这个程序,我可以在karate.log中看到cookie已经设置好了。但是当我在设置cookie后打开url时,仍然会弹出基本的auth。打印cookie会显示cookie信息。可能是chrome的某些功能不允许您自动完成这一点吗?我还试着用driver:chromedriver运行它,对于这个设置,cookie会给出一个错误——“无效域”。有什么想法吗?@rochitsen遗憾的是没有想法。检查您是否需要
键:-如果您研究了所需的cookie并进行了设置-您应该能够绕过登录。如果需要,请与前端开发团队合作-最后一种方法是,遵循以下流程:因此我尝试将此作为登录url,由驱动程序打开-“”。通过这种方式,我可以绕过基本的auth弹出窗口(调用功能中的登录代码)。登录页面打开,我用空手道登录,cookie被自动设置。将控件返回到我的调用功能(实际测试),然后打开其他页面“/names”,测试成功。我已经成功运行了驱动程序类型:chrome和chromedriver。希望这个解决方案长期有效。@rochitsen是的,听起来不错。你可以尝试这个实验来提取cookie值,并使用我的答案中的模式来使用它——如果它不起作用——请尝试向我们传递信息以改进空手道,请参阅我上一篇评论中的链接。还请阅读以下内容:)
Feature: Login test

  Background:
    # Authorise via api
    * callonce read('classpath:common/headers/admin-headers.feature') 
    * configure driver = { type: 'chrome' }

  Scenario: Test login
    Given driver 'https://test.internal.mysite.com/names'
Feature: Login test

  Background:
    # Authorise via api
    * def login = callonce read('classpath:common/headers/admin-headers.feature')
    * def uiCookie = { name: 'SESSION', value: '#(login.userAuthInfo.authSession)', domain: 'test.internal.mysite.com' }
    * configure driver = { type: 'chrome', cookie: '#(uiCookie)' }

  Scenario: Test login
    Given driver 'https://test.internal.mysite.com/names'
* driver 'about:blank'
* cookie(uiCookie)
* driver 'https://test.internal.mysite.com/names'