Использование SpecFlow, Selenium и FluentAutomation вызывает проблемы

В настоящее время я использую Specflow с Selenium и FluentAutomation и сталкиваюсь со значительными проблемами с поддержанием состояния между этапами в Specflow.

Смотрите мой пример кода ниже:

[Binding]
public class RegistrationSteps : FluentTest
{

    [Given(@"I create an account")]
    public void GivenICreateAnAccount()
    {
        new HomePage(this)
            .Go()
            .StartRegistration()
            .EnterDetailsAndClickSubmit(); // takes me to deposit page
    }

    [When(@"Deposit '(.*)' dollars in my account")]
    public void GivenDepositMoneyInMyAccount(int amount)
    {
        new DepositPage(this)
            .EnterDetailsAndClickSubmit(amount);
    }
}

Моя проблема:

  • На первом этапе страница загружается с помощью Go() и все происходит нормально
  • На втором этапе мои тесты продолжаются, здесь я ожидаю, что я нахожусь на другой странице, основанной на Подтверждении в предыдущем
  • Потому что я не по другому PageObject это запутывается, я не использую Go потому что предыдущий шаг должен был привести меня сюда, и на этом этапе он не найдет ожидаемые элементы

Итак, мой вопрос, как я могу использовать один сеанс браузера и несколько PageObjects для нескольких тестов Specflow?

1 ответ

Согласно документу FluentAutomation, вы должны сделать что-то вроде этого:

[Binding]
public class RegistrationSteps : FluentTest
{
    private PageObject _currentPage;

    [Given(@"I create an account")]
    public void GivenICreateAnAccount()
    {
        _currentPage = new HomePage(this)
            .Go()
            .StartRegistration()
            .EnterDetailsAndClickSubmit(); // takes me to deposit page
    }

    [When(@"Deposit '(.*)' dollars in my account")]
    public void GivenDepositMoneyInMyAccount(int amount)
    {
        _currentPage = _currentPage
            .EnterDetailsAndClickSubmit(amount);
    }
}

При условии, что вы возвращаете объект страницы, на который переключен метод EnterDetailsAndClickSubmit вашего конкретного объекта страницы, например:

Public PageObject EnterDetailsAndClickSubmit() {

    // [.. enter details here and click submit ..]
    return this.Switch();
}
Другие вопросы по тегам