在Cucumber步骤定义中传递变量

4
在Cucumber中,我应该如何在步骤定义类之间传递变量。我正在尝试在Scala中实现。
我看到有人建议使用Guice或Picocontainer或任何其他DI框架。但是我还没有看到Scala的示例。
例如,在下面的示例中,我应该如何使用DI来传递变量?
Provider.scala,
class Provider extends ScalaDsl with EN with Matchers with WebBrowser {
  ......

  When("""I click the Done button$""") {
    val doneButton = getElement(By.id(providerConnectionButton))
    doneButton.click()
  }

  Then("""a new object should be created successfully""") {
    // Pass the provider ID created in this step to Consumer definition
  }
}

Consumer.scala,

class Consumer extends ScalaDsl with EN with Matchers with WebBrowser {
  ......

  When("""^I navigate to Consumer page$""") { () =>
    // providerId is the id from Provider above
    webDriver.navigate().to(s"${configureUrl}${providerId}")
  }
}

1
您应该完善您的问题并提及Scala,因为该问题涉及Scala特定内容。我还建议您在Cucumber邮件列表上提出此问题,在主题前加上[scala]前缀。祝您好运! - diabolist
你有没有找到解决方案? - jqno
1个回答

2
你可以使用ThreadLocal来解决你的问题。
以下是解决方案的代码片段。
object IDProvider{
      val providerId = new ThreadLocal[String]
      def getProviderId: String = {
           providerId.get()
      }

      def setProviderId(providerId: String): Unit = {
           providerId.set(providerId)
      }
}

要在不同的步骤定义中访问providerID,只需调用IDProvider.getProviderId

要设置providerID的值,只需调用IDProvider.setProviderId(PROVIDER_ID)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接