Передача переменных между определениями шагов огурца
В 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)