0

我目前正在使用带有 Selenium 和 FluentAutomation 的 Specflow,并且在维护 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,因为上一步应该把我带到这里,而在这个阶段它不会找到预期的元素

所以我的问题是,如何在多个 Specflow 测试中使用一个浏览器会话和多个 PageObjects?

4

1 回答 1

0

根据FluentAutomation doc,您应该执行以下操作:

[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();
}
于 2015-09-02T09:43:30.850 回答