Selenium WebDriver C#NUnit测试并行失败

时间:2017-09-26 15:08:04

标签: c# selenium-webdriver parallel-testing

请参阅底部的更新!

我正在设置我的框架,目前有4个测试。它们各自都像魅力一样。但是,当我尝试并行运行所有4个时(我已正确设置了Parallelizable属性并且正在调用来自不同类的测试,而不是在同一个方法中)我一直得到几个似乎跳过的错误围绕每个测试。这些是我每次运行的消息:enter image description here enter image description here enter image description here

再次单独运行测试时会找到这些对象。我不确定我需要显示哪些代码才能提供帮助。请指教。

更新** @Chris我的怀疑是一样的。我认为我的测试在查找对象时会混淆相同的驱动程序。如果是这种情况可以有人请建议如何更好地处理这个,我的浏览器类就是调用驱动程序。

public class Pages
{
    private  T GetPage<T>() where T : new()
    {
        var page = new T();
        PageFactory.InitElements(Browser.Driver, page);
        return page;
    }
    public  LoginPage Login
    {
        get { return GetPage<LoginPage>(); }
    }

    public  RegisterPage Register
    { get { return GetPage<RegisterPage>(); } }

    public  SearchPage Search
    { get { return GetPage<SearchPage>(); } }
}

最新更新:根据建议,我删除了静态引用,但有人可以帮我解释在当前代码中创建驱动程序实例的语法

{{1}}

我不知道如何创建Browser.Driver的实例请帮忙!

2 个答案:

答案 0 :(得分:0)

删除班级中对“static”的所有引用,并在每个测试中创建该类的实例以修复您的问题。

...现在更改您的Page类以接受构造函数中的驱动程序

public class Pages
{
    private readonly ISearchContext _context;

    public Pages(ISearchContext context)
    {
        _context = context; 
    }

    private T GetPage<T>() where T : new()
    {
        var page = new T();
        PageFactory.InitElements(_context, page);
        return page;
    }
    public LoginPage Login
    {
        get { return GetPage<LoginPage>(); }
    }

    public RegisterPage Register
    { get { return GetPage<RegisterPage>(); } }

    public SearchPage Search
    { get { return GetPage<SearchPage>(); } }
}

...然后在你的测试方法中

var browser = new Browser();
var page = new Page(browser.Driver);

答案 1 :(得分:0)

对不起。离开后发现了你的更新。

我有一个单独的类助手,用于返回我的Web驱动程序。我正在使用镀铬驱动程序和(无头)单元驱动程序,在我的机器上,策略需要几个参数才能使它运行,所以一个类本身就能让我理解。例如。 WebDriverHelper.java。这有几个静态方法,它们返回一个感兴趣的驱动程序的新实例。

E.g。

WebDriver myDriver = WebDriverHelper.ChromeDriver();

我的ChromeDriver方法会返回一个新驱动程序。

E.g。

return new ChromeDriver;

如果您需要更多细节,请告诉我,明天上班时我会复课。