在Cucumber步骤定义之间传递变量

时间:2016-11-01 22:22:35

标签: scala cucumber cdi guice picocontainer

在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 个答案:

答案 0 :(得分:1)

您可以使用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