Я расширяю учебник по Slideshare
На слайде 164 мы заменим группу строк кода на:
connie.attemptsTo(
PlanAjourney.from("Waterloo").to("CanaryWharf").departingAt("09:00")
);
Класс PlanAJourney только с первым методом from должен выглядеть примерно так:
public class PlanAjourney
{
public static PlanAjourney from(String departure)
{
return Task.where("{0} chooses #departure as a departure station",
Enter.theValue(departure).into(JourneyPlanner.DEPARTURE_STATION)
)
}
}
Теперь представьте, что это не одностраничное приложение, а многооконное приложение. Представьте, что Конни нужно переключиться в другое окно, чтобы увидеть JourneyPlanner.DEPARTURE_STATION.
Теперь я бы хотел, чтобы актер мог получить текущий дескриптор окна. Это было бы что-то вроде:
import net.serenitybdd.screenplay.Actor;
import net.serenitybdd.screenplay.Task;
import net.serenitybdd.screenplay.abilities.BrowseTheWeb;
import net.serenitybdd.screenplay.actions.Click;
import net.serenitybdd.screenplay.actions.Enter;
import net.serenitybdd.screenplay.actions.Switch;
public class PlanAjourney
{
public static PlanAjourney from(String departure)
{
String currentWindowHandle = BrowseTheWeb.as(actor).getWindowHandle();
return Task.where("{0} chooses #departure as a departure station",
Click.on(HomePage.JOURNEY_PLANNER_LINK),
Switch.to(getNewWindowHandle(actor, currentWindowHandle)),
Enter.theValue(departure).into(JourneyPlanner.DEPARTURE_STATION)
)
}
private static String getNewWindowHandle(Actor actor, String currentWindowHandle)
{
for (String windowHandle : BrowseTheWeb.as(actor).getDriver().getWindowHandles())
{
if (!windowHandle.equals(currentWindowHandle))
{
return windowHandle;
}
}
return null;
}
}
Но, конечно, это не компилируется, потому что актер не известен.
Как я мог получить актера? Или есть другой способ?