运行 所有测试后 NUnit Selenium webdriver 未关闭

NUnit Selenium webdriver is not closed after running all tests

我正在尝试打开浏览器,运行 几个测试并关闭浏览器。我的问题是浏览器在 运行 完成所有测试后仍保持打开状态。关闭浏览器的正确方法是什么?如果我在每个测试中放置 [Setup] 和 [TearDown] 属性来打开和关闭浏览器 - 浏览器打开和关闭,但如果我放置 [OneTimeSetup] 和 [OneTimeTearDown] 属性 - 浏览器保持打开状态。

using Atata;
using NUnit.Framework;
namespace UITests
{
[TestFixture]
public class UITestFixture
{
    [OneTimeSetUp]
    public void SetUp()
    {
        //Open Chrome
         AtataContext.Configure().
         ApplyJsonConfig("Atata.json").
         Build();
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        AtataContext.Current?.CleanUp();
    }
}
}

using Atata;
using NUnit.Framework;
namespace UITests
{
class Tests : UITestFixture
{
    [Test]
    public void PositiveTest()
    {
         Go.To<OverallViewPage>().ItemToVerify1.Should.Equal("2,006.59");
    }
    [Test]
    public void NegativeTest()
    {
        Go.To<OverallViewPage>().ItemToVerify2.Should.Equal("2,006.59");
    }

}
}
using Atata;
namespace UITestFixture
{    
    using _ = OverallViewPage;
    public class OverallViewPage : Page<_>
    {
        [FindByXPath("/html/body/div[2]/app-root/pnl/div/div/pnl-total/pnl-total-grid/main-grid/div/div/div/main-grid-row/div[2]/main-grid-row/div[4]/div[3]/div/span")]
        public Link<_> ItemToVerify1 { get; private set; }

        [FindByXPath("/html/body/div[2]/app-root/pnl/div/div/pnl-total/pnl-total-grid/main-grid/div/div/div/main-grid-row/div[2]/main-grid-row/div[4]/div[2]/div/span")]
        public Link<_> ItemToVerify2 { get; private set; }
    }
}

在不同的测试中使用相同的 AtataContext 是可能的,但不正确。应该为每个 UI 测试创建单独的 AtataContext,因为 AtataContext 也在测试执行期间收集日志。但是您可以通过将已创建的 RemoteWebDriver 实例传递给每个 AtataContextBuilder.

来通过不同的测试重用相同的 Web 驱动程序实例

查看 Fixture Reusing Driver Atata 示例项目的来源。

基本上你需要像下面这样增强基础测试夹具 class:

using Atata;
using NUnit.Framework;
using OpenQA.Selenium.Remote;

namespace AtataSamples.FixtureReusingDriver
{
    [TestFixture]
    public class UITestFixture
    {
        protected virtual bool ReuseDriver => false;

        protected RemoteWebDriver PreservedDriver { get; private set; }

        [OneTimeSetUp]
        public void SetUpFixture()
        {
            if (ReuseDriver)
                PreservedDriver = AtataContext.GlobalConfiguration.BuildingContext.DriverFactoryToUse.Create();
        }

        [SetUp]
        public void SetUp()
        {
            AtataContextBuilder contextBuilder = AtataContext.Configure();

            if (ReuseDriver && PreservedDriver != null)
                contextBuilder = contextBuilder.UseDriver(PreservedDriver);

            contextBuilder.Build();
        }

        [TearDown]
        public void TearDown()
        {
            AtataContext.Current?.CleanUp(!ReuseDriver);
        }

        [OneTimeTearDown]
        public void TearDownFixture()
        {
            if (PreservedDriver != null)
            {
                PreservedDriver.Dispose();
                PreservedDriver = null;
            }
        }
    }
}

然后在 fixture classes 中,您需要在所有测试中使用相同的驱动程序实例,启用 ReuseDriver 属性:

public class SomeTests : UITestFixture
{
    protected override bool ReuseDriver => true;

    [Test]
    public void SomeTest()
    {
        //...
    }
}