specflow selenium grid并行问题

时间:2017-12-13 10:54:53

标签: c# selenium specflow selenium-grid

我发现selenium gridparallel测试存在问题,当我针对grid执行测试时,{1} node所有测试都没有问题。

当我添加第二个节点时,测试失败,我认为它们相互摔倒但是我不确定我需要做些什么来防止这种情况发生

在我的集会中,我宣布了

[assembly: Parallelizable(ParallelScope.Fixtures)]

其中一项测试的error如下

OpenQA.Selenium.NoSuchElementException : Unable to find element
----> System.InvalidOperationException : Session 
[bda80023962a2441e3c7ae66a75e982e] was terminated due to 
CLIENT_STOPPED_SESSION

非常感谢任何帮助

添加到此以获得一些帮助,因为我没有取得进展

我正在使用以下软件包

  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
  <package id="NUnit" version="3.8.1" targetFramework="net452" />
  <package id="NUnit.Console" version="3.0.0" targetFramework="net452" />
  <package id="Selenium.Support" version="3.7.0" targetFramework="net452" />
  <package id="Selenium.WebDriver" version="3.7.0" targetFramework="net452" />
  <package id="SpecFlow" version="2.2.1" targetFramework="net452" />
  <package id="SpecFlow.NUnit" version="2.2.1" targetFramework="net452" />

我有一个标准的selenium网格设置,有2个物理上独立的节点,当测试单独运行时,它们没有任何问题,但是当并行运行时,两个测试都会因不同的错误而失败

OpenQA.Selenium.WebDriverException : no such session

OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element

我仍然完全不知道为什么会这样。

添加更多内容我很确定这是由于我缺乏编码技巧,我认为当测试运行时驱动程序会彼此混淆,这就是为什么单独运行它们没有问题。

所以我需要尝试解释一下我建立的内容,看看是否有人可以提供帮助

所以我有一个Specflow功能文件 这与一个包含测试步骤的步骤类相关联,而不是其他任何内容

我有一个General类,我希望每个测试都能运行,所以这是负责创建驱动程序并通过它所以我担心这是我出错的地方。

在普通班的顶部,我创建了驱动程序

public static IWebDriver Driver;

同样在普通班中,我有一个构造函数

  public General(IWebDriver driver)
    {
        Driver = driver;
    }

在一般班级我有

    [BeforeScenario()]
    public static void BeforeScenario()
    {
        Driver = StartLocalDriver();
    }

    [AfterScenario()]
    public static void AfterScenario()
    {
        Driver.Quit();
    }

我希望在每个场景之前为测试创建一个驱动程序

我希望这会允许每个测试单独分配驱动程序,但我猜驱动程序仍然可以看到彼此并且彼此相互接触。

我想知道是否有人有更好的方法来防止这种情况发生

步骤类选择驱动程序,因为我在每个步骤页面的顶部都有一个using语句

using static MoneyUITests.Methods.General;

我担心这可能会很困难,因为步骤在不同的文件中,而有些则重复用于其他测试

谁能帮助我呢?

1 个答案:

答案 0 :(得分:0)

我发现我犯了使驱动程序静态的错误,这意味着当步骤代码执行时它们的驱动程序在击中基类时会相互绊倒。

所以我发现另一个堆栈溢出问题帮助我解决了我的问题

NUnit Specflow how to share a class instance for all tests

此示例让您使用IOC来确保每次都调用驱动程序的正确实例。 这允许测试彼此并行运行。

我现在有一个带有构造函数的类,它可以驱动驱动程序。

在每个步骤课程中,我都有以下内容

TestCase

它不是最优雅的解决方案,但似乎对我有用