selenium 如何正确使用TestContext.Properties

u7up0aaq  于 2023-01-02  发布在  其他
关注(0)|答案(4)|浏览(100)

我需要在访问TestMethod之前访问TestContext.Properties,以便测试可以接收正确的测试环境。
我的test.runsettings的内容:

<?xml version="1.0" encoding="utf-8"?>
  <RunSettings>
    <TestRunParameters>
      <Parameter name="colegio" value="7" />
    </TestRunParameters>

如您所见,该文件只包含一个参数,称为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
        }
    }

如您所见,public TestBase(int id = (int)ColegioEnum.ColegioDemoMovilidad2_Supervisor)接收到一个参数,它对应于我想要测试的colegio环境。
然而,当我尝试在TestClass中示例化TestContext时,如下所示:

[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"]) { }

出现以下错误:x1米11米1x
任何帮助是感激的,因为我已经给了这个问题很多时间,我不能取得任何进展。

blpfk2vs

blpfk2vs1#

您必须解决以下几个问题:

  • TestInitialize方法不能是静态的,并且不应具有任何参数
  • 您将需要具有ClassInitialize属性和TestContext作为参数的静态方法
  • 测试类中的TestContext不能是静态的

之后,你可以在任何单元测试中访问你想要的任何属性。

[TestClass]
public class GenerarBoletinDeClase
{
    public TestContext TestContext { get; set; }

    public static int Colegio { get; set; }

    [ClassInitialize]
    public static void ClassInitialize(TestContext testContext)
    {
        Colegio = int.Parse(testContext.Properties["colegio"].ToString()); // colegio is equal 7 in here
    }

    [TestInitialize]
    public void TestInitialize()
    {
        int tempColegio = int.Parse(this.TestContext.Properties["colegio"].ToString()); // colegio is equal 7 in here
    }

    [TestMethod]
    public void TestMethod1()
    {
        int colegio = int.Parse(this.TestContext.Properties["colegio"].ToString()); // colegio is equal 7 in here as well

        Assert.AreEqual(7, Colegio);
        Assert.AreEqual(7, colegio);
        Assert.AreEqual(colegio, Colegio);
    }
}
e4eetjau

e4eetjau2#

首先,感谢@Peska在此答案https://stackoverflow.com/a/51367231/5364231中提供代码
最后,我把下面的代码添加到类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>();
    }

装饰器[AssemblyInitialize]是必要的,[ClassInitialize][TestInitialize]将不起作用,我相信这是因为TestContext还没有被示例化。
之后,请转到Test > Test Settings > Select Test Settings File以确保您已配置了Test Settings File,该文件必须命名为*.runsettings
这样,就应该为TestContext.Properties设置好一切,以便从测试设置文件中读取数据

hgncfbus

hgncfbus3#

正如本Microsoft文档中所解释的,您不需要分配TestContext来填充它。它会在每次TestInitialize调用之前自动分配。从那里,您可以通过属性访问在 *.runsettings中定义的属性。
总之,只需添加一个名为TestContext的TestContext类型化属性,MS Test就会在运行时填充它。

z5btuh9x

z5btuh9x4#

要使用该文件:test.runsettings 1-必须手动选择运行stting文件在IDE中,选择测试〉配置运行设置〉选择解决方案范围的runsettings文件,然后选择.runsettings文件。
2-设置您已通过属性为项目指定运行设置文件的生成属性:运行设置文件路径
reference

相关问题