运行 所有测试后 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()
{
//...
}
}
我正在尝试打开浏览器,运行 几个测试并关闭浏览器。我的问题是浏览器在 运行 完成所有测试后仍保持打开状态。关闭浏览器的正确方法是什么?如果我在每个测试中放置 [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
.
查看 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()
{
//...
}
}