Specflow/Selenium 在同一浏览器上同时测试 运行(并干扰)
Specflow/Selenium tests run simultaneously on same browser (and interfere)
我有一些用 SpecFlow 和 Selenium 编写的测试。我希望他们暂时按顺序 运行。由于某种原因,它们在同一个浏览器 window 上同时启动并相互干扰。我确实想要测试 重新使用 浏览器 window 但我显然不希望它们 运行 同时在同一个 window.
我设置了这些 classes 以重复使用浏览器 window:
public class SeleniumContext
{
public ChromeDriver WebDriver { get; set; }
public SeleniumContext()
{
ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference(LogType.Browser, LogLevel.All);
options.AddArgument("no-sandbox");
WebDriver = new ChromeDriver("./", options, TimeSpan.FromSeconds(240));
}
}
[Binding]
public class BeforeAllTests
{
private readonly IObjectContainer objectContainer;
private static SeleniumContext seleniumContext;
public BeforeAllTests(IObjectContainer container)
{
this.objectContainer = container;
}
[BeforeTestRun]
public static void RunBeforeAllTests()
{
seleniumContext = new SeleniumContext();
}
[BeforeScenario]
public void RunBeforeScenario()
{
objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext);
}
[AfterTestRun]
public static void afterRun()
{
seleniumContext.WebDriver.Quit();
}
}
示例步骤class:
[Binding]
public sealed class LogInSteps
{
private ChromeDriver driver;
public LogInSteps(SeleniumContext seleniumContext)
{
this.driver = seleniumContext.WebDriver;
}
//step definitions here
}
当我单击 "Run All" 时,它们都会启动,并且 运行 会同时启动 window:
我不希望他们同时 运行 在同一个 window 上。我怎样才能让它们按顺序到达 运行?使用测试播放列表不是一种选择。我也会在不同的 windows 上接受 运行ning,但是当它们的行为与它们的行为相同时,测试会相互干扰并导致它们失败。他们 运行 成功 运行 个人。
解决方案是将以下内容添加到 AssemblyInfo.cs:
[assembly: CollectionBehavior(DisableTestParallelization = true)]
这告诉 xUnit 不要运行并行测试。
参考:https://xunit.github.io/docs/running-tests-in-parallel.html
我有一些用 SpecFlow 和 Selenium 编写的测试。我希望他们暂时按顺序 运行。由于某种原因,它们在同一个浏览器 window 上同时启动并相互干扰。我确实想要测试 重新使用 浏览器 window 但我显然不希望它们 运行 同时在同一个 window.
我设置了这些 classes 以重复使用浏览器 window:
public class SeleniumContext
{
public ChromeDriver WebDriver { get; set; }
public SeleniumContext()
{
ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference(LogType.Browser, LogLevel.All);
options.AddArgument("no-sandbox");
WebDriver = new ChromeDriver("./", options, TimeSpan.FromSeconds(240));
}
}
[Binding]
public class BeforeAllTests
{
private readonly IObjectContainer objectContainer;
private static SeleniumContext seleniumContext;
public BeforeAllTests(IObjectContainer container)
{
this.objectContainer = container;
}
[BeforeTestRun]
public static void RunBeforeAllTests()
{
seleniumContext = new SeleniumContext();
}
[BeforeScenario]
public void RunBeforeScenario()
{
objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext);
}
[AfterTestRun]
public static void afterRun()
{
seleniumContext.WebDriver.Quit();
}
}
示例步骤class:
[Binding]
public sealed class LogInSteps
{
private ChromeDriver driver;
public LogInSteps(SeleniumContext seleniumContext)
{
this.driver = seleniumContext.WebDriver;
}
//step definitions here
}
当我单击 "Run All" 时,它们都会启动,并且 运行 会同时启动 window:
我不希望他们同时 运行 在同一个 window 上。我怎样才能让它们按顺序到达 运行?使用测试播放列表不是一种选择。我也会在不同的 windows 上接受 运行ning,但是当它们的行为与它们的行为相同时,测试会相互干扰并导致它们失败。他们 运行 成功 运行 个人。
解决方案是将以下内容添加到 AssemblyInfo.cs:
[assembly: CollectionBehavior(DisableTestParallelization = true)]
这告诉 xUnit 不要运行并行测试。
参考:https://xunit.github.io/docs/running-tests-in-parallel.html