首页 > 解决方案 > 在 karate-core 中为可重用功能创建函数

问题描述

我在空手道之上构建了一个框架,并有几个可重用的功能(主要是 Javascript 和实用程序)。我们可以重用功能,但我想知道是否有一种方法可以使用 UI 功能的 Javascript 函数来包装对这些功能的调用。我认为它使测试更容易抽象出一些代码——就像用一些自定义函数扩展 DSL 一样。

我似乎能够使用 Karate DSL 中的功能来实现这一点,这些功能不属于 UI 自动化包/空手道核心,但不适用于 UI 功能。

例如,我有以下名为click.feature的可重用功能(可点击的“div”的解决方法,其中 .click() 似乎在 Web 驱动程序中不起作用):

Scenario:
  Then def pos = position(__arg.selector)
  And def x = Math.round(pos.x + pos.width/2)
  And def y = Math.round(pos.y + pos.height/2)
  And mouse().move(x, y).click() 

以及下面的 JS 函数:

Scenario:    
  * def moveAndClick =
  """
    function(selector) {
      karate.call('click.feature', ( { selector : selector } ))
    }
  """

当我尝试使用它时,我收到以下错误:

click.feature:5 - evaluation (js) failed: position(__arg.selector), javax.script.ScriptException: ReferenceError: "position" is not defined in <eval> at line number 1

这似乎仅限于 UI 功能,因为我尝试了assertprint关键字并且这些关键字有效。我错过了什么还是设计使然?

标签: karate

解决方案


您能否检查此问题并查看是否解决了您的问题:https ://github.com/intuit/karate/issues/1280 - 如果您可以从源代码构建并验证,那就太好了:https ://github.com/intuit /karate/wiki/开发者指南

因此,默认情况下,driver直到您第一次调用 URL 时才定义对象。但是如果你想使用可重用的函数,它们必须使用karate.get('driver'),然后你可以使用它来链接函数。


推荐阅读