gpt4 book ai didi

c# - 并行运行的 Selenium 测试导致错误 : invalid session id

转载 作者:行者123 更新时间:2023-11-30 15:52:32 36 4
gpt4 key购买 nike

希望获得一些有关使我的测试可并行化的帮助。我有一个 selenium c# 设置,它使用 NUnit、C# 和 selenium 的组合在我的计算机或 CI 服务器上本地按顺序运行测试。

我之前研究过测试的并行化,但无法跳转,按顺序运行就很好。

当我添加 NUnit [Parallelized] 标记时,我收到“OpenQA.Selenium.WebDriverException:无效 session id”错误,根据我所做的阅读,我需要使每个我调用的新驱动程序都是唯一的。但是,我不确定如何做到这一点?或者甚至开始解决这个问题......这在我当前的设置中是否可能?

我的测试目前正在进行有限的冒烟测试,只是删除了针对多个浏览器的重复回归测试,但是,我预见需要极大地扩展我的测试能力的覆盖范围。

从长远来看,我可能会考虑使用 Browserstack 或 Sauselab,但显然,这需要资金,而且我需要得到批准,所以我现在希望让它在本地运行。

这是我的代码的基本设置

测试文件:

第一个 .cs 测试文件

{
[TestFixture]
[Parallelizable]
public class Featur2Tests1 : TestBase
{
[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test1(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);

//Run test steps....
}

[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test2(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);

//Run test steps....
}
}
}

第二个.cs测试文件

{
[TestFixture]
[Parallelizable]
public class FeatureTests2 : TestBase
{
[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test1(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);

//Run test steps....
}

[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test2(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);

//Run test steps....
}
}
}

TestBase.cs 我为每个测试进行的设置

{ 
public class TestBase
{
public static IWebDriver driver;

public void Setup(string BrowserName, string Environment, string System)
{
Driver.Intialize(BrowserName);
//do additional setup before test run...
}

[TearDown]
public void CleanUp()
{
Driver.Close();
}

public static IEnumerable TestData
{
get
{
string[] browsers = Config.theBrowserList.Split(',');
string[] Environments = Config.theEnvironmentList.Split(',');
string[] Systems = Config.theSystemList.Split(',');
foreach (string browser in browsers)
{
foreach (string Environment in Environments)
{
foreach (string System in Systems)
{
yield return new TestCaseData(browser, Environment, System);
}
}
}
}
}
}
}

IEnumerable TestData 来自名为 config.resx 的文件,包含以下数据:

  • {名称}:{值}
  • 浏览器列表:Chrome、Edge、Firefox
  • 环境列表:QA
  • 系统列表:WE

这是我在 Driver.cs 中创建驱动程序的位置

{
public class Driver
{
public static IWebDriver Instance { get; set; }

public static void Intialize(string browser)
{
string appDirectory = Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName;
string driverFolder = $"{appDirectory}/Framework.Platform/bin/debug";
if (browser == "Chrome")
{
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.AddUserProfilePreference("safebrowsing.enabled", true);
chromeOpts.AddArgument("start-maximized");
chromeOpts.AddArgument("log-level=3");
Instance = new ChromeDriver(driverFolder, chromeOpts);
}
else if (browser == "IE")
{
var options = new InternetExplorerOptions { EnsureCleanSession = true };
options.AddAdditionalCapability("IgnoreZoomLevel", true);
Instance = new InternetExplorerDriver(driverFolder, options);
Instance.Manage().Window.Maximize();
}
else if (browser == "Edge")
{
EdgeOptions edgeOpts = new EdgeOptions();
Instance = new EdgeDriver(driverFolder, edgeOpts);
Instance.Manage().Window.Maximize();
Instance.Manage().Cookies.DeleteAllCookies();
}
else if (browser == "Firefox")
{
FirefoxOptions firefoxOpts = new FirefoxOptions();
Instance = new FirefoxDriver(driverFolder, firefoxOpts);
Instance.Manage().Window.Maximize();
}
else { Assert.Fail($"Browser Driver; {browser}, is not currently supported by Initialise method"); }
}


public static void Close(string browser = "other")
{
if (browser == "IE")
{
Process[] ies = Process.GetProcessesByName("iexplore");
foreach (Process ie in ies)
{
ie.Kill();
}
}
else
{
Instance.Quit();
}
}
}
}

最佳答案

所有测试都使用相同的驱动程序,该驱动程序在 TestBase 中定义为静态驱动程序。两个装置将并行运行,并且都会影响驾驶员的状态。如果您希望两个测试并行运行,它们不能都使用相同的状态,常量或只读值除外。

要做的第一件事是使驱动程序成为实例成员,以便每个派生的装置都与不同的驱动程序一起工作。如果这不能解决问题,它至少会带您走向解决方案的下一步。

关于c# - 并行运行的 Selenium 测试导致错误 : invalid session id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214264/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com