elg*_*ato 8 c# selenium mstest
我需要TestContext.Properties在 a 之前访问,TestMethod以便测试可以接收正确的环境进行测试。
我的内容test.runsettings:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<TestRunParameters>
<Parameter name="colegio" value="7" />
</TestRunParameters>
Run Code Online (Sandbox Code Playgroud)
如您所见,该文件仅包含一个参数,称为 colegio (school)
这是内容TestBase.cs:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using InfraestructureSelenium.Helper;
using System.Collections.Generic;
using InfraestructureSelenium.Configuration.Enumerados;
namespace TestSelenium
{
[DeploymentItem("chromedriver.exe")]
[DeploymentItem("IEDriverServer.exe")]
[DeploymentItem("phantomjs.exe")]
[DeploymentItem("geckodriver.exe")]
[TestClass]
public class TestBase
{
protected TestBase()
{ }
public TestBase(int id = (int)ColegioEnum.ColegioDemoMovilidad2_Supervisor)
{
DiccionarioCompartido = new Dictionary<string, string>();
SeleniumHelper = new HelperSelenium(id, WebDriverSelector.ObtenerWebDriver());
}
public TestBase(HelperSelenium seleniumHelper, Dictionary<string, string> diccionarioCompartido = null)
{
SeleniumHelper = seleniumHelper;
}
public HelperSelenium SeleniumHelper { get; set; }
public static Dictionary<string, string> DiccionarioCompartido { get; set; }
public void CloseBrowser()
{
SeleniumHelper.Quit();
}
#region Configuración Test
[TestInitialize]
public void InitializeTest()
{
}
[TestCleanup]
public void TestCleanupTest()
{
SeleniumHelper.Quit();
}
#endregion
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,public TestBase(int id = (int)ColegioEnum.ColegioDemoMovilidad2_Supervisor)接收一个参数,它对应于colegio我要测试的环境。如果 nocolegio作为参数传递,则默认值为ColegioEnum.ColegioDemoMovilidad2_Supervisor
但是,当我尝试TestContext在 a 中实例化时TestClass,如下所示:
[TestClass]
public class GenerarBoletinDeClase : TestBase
{
public TestContext TestContext { get; set; }
private static TestContext _testContext;
[TestInitialize]
public static void SetupTests(TestContext testContext)
{
_testContext = testContext;
}
public GenerarBoletinDeClase() : base((int)TestContext.Properties["colegio"]) { }
Run Code Online (Sandbox Code Playgroud)
出现以下错误: An object reference is required for the non-static field, method, or property
感谢任何帮助,因为我已经给了这个问题很多时间,但我无法继续前进。
首先,感谢@Peska提供了这个答案中的代码/sf/answers/3595706201/
所以,最后我所做的是将以下代码添加到类中TestBase:
public class TestBase
{
public TestContext TestContext { get; set; }
public static int Colegio { get; set; }
[AssemblyInitialize]
public static void ClassInitialize(TestContext TestContext)
{
Colegio = int.Parse(TestContext.Properties["colegio"].ToString()); // colegio is equal 7 in here
}
public TestBase()
{
SeleniumHelper = new HelperSelenium(Colegio, WebDriverSelector.ObtenerWebDriver());
DiccionarioCompartido = new Dictionary<string, string>();
}
Run Code Online (Sandbox Code Playgroud)
我相信装饰器[AssemblyInitialize]是必要的,[ClassInitialize]但[TestInitialize]不会起作用,因为 TestContext 尚未实例化。
之后,确保您已Test Settings File通过转到配置Test > Test Settings > Select Test Settings File,该文件必须命名为*.runsettings
这样,一切都应该设置为TestContext.Properties从测试设置文件中读取