将Nunit的[setup]和[teardown]属性与Selenium一起使用时,无法同时运行[Test]

时间:2018-08-02 15:04:31

标签: c# visual-studio selenium automated-tests nunit

下面是Test类代码:

 [TestFixture]
public class Playground
{
public static IWebDriver d { set; get; }

[SetUp]
    public void Initialize_Browser()
    {
        d = new ChromeDriver();
        d.Manage().Window.Maximize();
        d.Url = "https://the-internet.herokuapp.com/";
    }

    [TearDown]
    public void Quit()
    {
        d.Quit();
    }



[Test]
    public void Test1()
    {
        POM p = new POM();
        m.Iwait(15);
        m.Print("You are now at " + p.main_header_txt + " page");
    }
[Test]
    public void Test2()
    {
        POM p = new POM();
        p.Hover_Images();
    }

以下是另一个类,该类具有包含常用代码的自定义静态方法:(用于将鼠标悬停在元素上)

public class m
{
 static IWebDriver d= Playground.d;
 public static void Hover(IWebElement IW)
    {
        Actions act = new Actions(d);
        act.MoveToElement(IW).Build().Perform();
    }
}

下面是另一个类,其方法在测试类中被调用。

public class POM
{    
static IWebDriver d= Playground.d;
IWebElement hovers_link => d.FindElement(By.LinkText("Hovers"));
public void Hover_Images()
    {
        hovers_link.Click();
        IList<IWebElement> user_image = d.FindElements(By.XPath("//div[@class='figure']"));
        foreach (IWebElement ui in user_image)
        {
            m.Hover(ui);
            Thread.Sleep(1000);
        }
    }

}

构建解决方案并运行它之后,测试1()通过,测试2()失败。

但是,如果我单独运行Test2(),则可以通过!

如果我仅使用[onetimesetup]和[onetimeteardown]而不是[setup]和[teardown],则测试通过。 在“调试模式”下,它表明执行Hovers方法时会发生异常。

Debug Mode - Exception

Exception details - 1

Exception details - 2

我想念什么吗?请帮我。

谢谢。

2 个答案:

答案 0 :(得分:0)

您没有显示驱动程序实例d的定义。根据用法,我假设它被定义为测试类的成员变量。这意味着两个测试都使用d的相同实例。

我的猜测是,您已启用测试的并行运行,并且它们正在逐步使用彼此的通用驱动程序。当您使用一次设置而不是设置时,只会创建一个驱动程序。如果这正是您要进行的测试,则可以。根据您使用驱动程序执行的操作,并行测试可能不会互相影响。

当然,另一种解决方法是将测试标记为不可并行化。

答案 1 :(得分:0)

我找到了解决方法,

我已经将Hover()方法的参数修改为      公共静态无效悬停(IWebDriver d,IWebElement IW)      {      行动=新行动(d);     act.MoveToElement(IW).Build()。Perform();     }

,并从类m中删除了驱动程序实例      IWebDriver d = d.Playground