Передача переменных между определениями шагов огурца

В 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 ответ

Решение

Вы можете использовать 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)

Другие вопросы по тегам