【问题标题】:Using SpecFlow, Selenium and FluentAutomation causing problems使用 SpecFlow、Selenium 和 FluentAutomation 导致问题
【发布时间】:2015-09-02 07:51:56
【问题描述】:

我目前正在使用带有 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?

【问题讨论】:

  • 你有一个错字。当我认为您的意思是“现在”或“不”时,您说“不”。另外,“它变得混乱”是什么意思?有错误吗?究竟是什么问题?事情发生得太快了吗?您在哪里等待第二页加载?

标签: selenium specflow fluentautomation


【解决方案1】:

根据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();
}

【讨论】:

  • 问题是,当该开关更改页面对象的类型(通常会这样做)然后转换为基本 PageObject 时,您将丢失所有方法信息并且无法继续。跨度>
  • 好吧,您可以将其转换为正确的类型,例如:var depositPage = _currentPage as DepositPage; _currentPage = depositPage.EnterDetailsAndClickSubmit(amount);。通过明确说明类型,它也表明了意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2023-03-13
相关资源
最近更新 更多