将参数传递给TestFixture OneTimeSetUp来自SetUpFixture

时间:2017-03-09 07:32:44

标签: c# selenium-webdriver nunit nunit-3.0

我目前正在使用C#,nunit和Selenium构建一个自动化项目,我试图建立一个安装类,在任何TestFixture运行之前初始化selenium webdriver并且在所有这些已经结束并尝试从每个TestFixture TestFixture属性中的OneTimeSetUp获取该webdriver之后,是否可以完成或者我应该将selenium类更改为static以便能够在每个TestFixture设置中获取驱动程序字段吗?

所以基本结构是这样的:

[SetUpFixture]
public class Test
{
    [OneTimeSetUp]
    public void Init()
    {
       _driver = new Driver();
    }
}

[TestFixture]
public class FirstTest
{
    [OneTimeSetUp]
    public void Init()
    {
        xxxxxxxxxx - here I need to initialize a class with the driver from the setup class
    }
}

3 个答案:

答案 0 :(得分:2)

目前的情况是,NUnit可以为您执行此操作的唯一方法是使用静态。但如果您并行测试多个驱动程序,这将无法正常工作。

真正的解决方案(需要新的NUnit功能)是允许安装夹具在TestContext中保存信息,然后您的个人夹具可以访问。

解决方法是在fixture onetimesetup中创建一个新驱动程序,但前提是它尚未创建。这也需要静态,但您可以对其进行设置,以便为您支持的每种驱动程序类型提供单独的静态。

答案 1 :(得分:1)

可以通过重新使用远程Web驱动程序来完成。您必须获取会话的会话ID并将类扩展为重用远程Webdriver。然后,您可以使用URL和会话ID连接到每个测试类的现有会话。

答案 2 :(得分:0)

我对此使用Java和TestNG有类似的要求,但总体思路结构可能有所帮助。

我所做的是从设置驱动程序类型扩展我的每个测试类。因此,安装驱动程序类将选择浏览器和选项,导航到站点(或您需要执行的操作的第一页),然后测试类接管。但是,我可以通过使用@beforesuite和@aftersuite关键字将其保持在更高水平"而不是测试,所以它保持相同的实例。