简体   繁体   中英

Using SpecFlow, Selenium and FluentAutomation causing problems

I am currently using Specflow with Selenium and FluentAutomation, and am running into significant problems with maintaining state between steps in specflow.

See my example code below:

[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);
    }
}

My problem is:

  • In the first step the page is loaded using Go() and everything happens fine
  • In the second step my tests continue, here I expect I am on a different page, based in the Submit in the previous
  • Because I am no on a different PageObject it gets confused, I don't use Go because the previous step shouldve brought me here, and at this stage it wont find the expected elements

So my question is, how can I use one browser session and several PageObjects across multiple Specflow tests?

According to the FluentAutomation doc , you should do something like this:

[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);
    }
}

Provided that you return the page object that is switched to in the EnterDetailsAndClickSubmit method of your concrete page object like:

Public PageObject EnterDetailsAndClickSubmit() {

    // [.. enter details here and click submit ..]
    return this.Switch();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM