是否可以将C#添加到编码的UI数据源或UIMap.uitest文件中?

是否可以将C#添加到编码的UI数据源或UIMap.uitest文件中?,c#,automation,coded-ui-tests,qa,C#,Automation,Coded Ui Tests,Qa,假设我有一个编码的UI测试,我想驱动它 我正在测试的应用程序有一个日期字段,该日期字段仅支持>=当前日期的日期。是否可以在我的数据源中添加C代码,以便根据C代码生成日期 例如: DateTime.Now.ToString("MM/dd/yyyy") DateTime.Now.AddDays(90).ToString("MM/dd/yyyy") 如果不可能,是否可以将C#输入UIMap.uitest?当我输入代码时,测试将代码提取为字符串。我可以在设计器文件中输入C#代码,但1)这会经常被覆

假设我有一个编码的UI测试,我想驱动它

我正在测试的应用程序有一个日期字段,该日期字段仅支持>=当前日期的日期。是否可以在我的数据源中添加C代码,以便根据C代码生成日期

例如:

 DateTime.Now.ToString("MM/dd/yyyy")
 DateTime.Now.AddDays(90).ToString("MM/dd/yyyy")
如果不可能,是否可以将C#输入UIMap.uitest?当我输入代码时,测试将代码提取为字符串。我可以在设计器文件中输入C#代码,但1)这会经常被覆盖,2)这不允许我执行多个选项


我感谢你的帮助

UIMap.uitest由两个文件支持,一个是设计器文件,您应该像前面所说的那样保留它,因为它将再次生成

第二个文件是
UIMap.cs
,它是在设计文件中生成的类的部分类

每个生成的方法都带有一个[Methodname]Params类,该类保存该特定方法中使用的属性。要引入动态数据,可以执行以下操作

UIMap.cs
中添加此项(假设您有一个RecordedMethod1)

现在,在
CodedUiTest
TestMethod1
中,使用现在为RecordedMethod1创建的重载

    public partial class UIMap
    {
        public void RecordedMethod1(DateTime date)
        {
            RecordedMethod1Params.YourDate = date.ToString("MM/dd/yyyy");

            RecordedMethod1();
        }
    }
 this.UIMap.RecordedMethod1(DateTime.Now.AddDays(-90));

编码的UI测试可以是数据驱动的,这通常被认为是从数据文件(如CSV文件或电子表格)获取数据。但是数据驱动的思想可以用在其他方面。您的测试需要一部分数据驱动,但数据源是系统时钟

记录测试的一部分并将其另存为方法时,输入的任何值都将用作基于方法名称的类中字段的初始值。对于名为
MyMethod
的操作方法,类将是
MyMethodParams
。对于在名为
MyAssertion
的方法中检查断言的方法,该类将是
MyAssertionExpectedValues
。当方法运行时,它使用
…Params
…ExpectedValues
类中的值。在调用该方法之前,可以覆盖这些值

对于您的测试,每次执行测试都应该使用不同的日期和时间,您可以编写如下代码

MyMethodParams.DateField = DateTime.Now.AddDays(90).ToString("MM/dd/yyyy");
MyMethodParams.TimeField = DateTime.Now.ToString("HH:mm:ss.fff");
MyMethod();
如果每个测试迭代需要不同的日期,则可以将测试迭代编号添加到上面使用的
90
。可以通过类的
静态int
轻松计算迭代次数


编码的UI内容索引有到驱动编码的UI测试的数据和许多其他有用主题的链接。请参见以下内容:

为了简单性、可重复性和清晰性,创建包含要测试的各种日期的数据源(例如XML文件)并使用该数据源在测试中填充方法参数会更简单

当您运行测试时,它将为数据源中的每个数据行重新运行。因此,如果您有10个日期条目,它将运行10次

将以下代码放入CodedUI测试中。 这将定义测试将从中读取的数据源(data.xml)

[DeploymentItem("MyTest\\data.xml"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\data.xml", "Entry", DataAccessMethod.Sequential), TestMethod]
data.xml将如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<Data>
  <Entry>
   <Date>2013/01/01</Date>
  </Entry>
  <Entry>
   <Date>2013/03/11</Date>
  </Entry>
  <Entry>
   <Date>2013/04/11</Date>
  </Entry>
  <Entry>
   <Date>2013/06/17</Date>
  </Entry>
</Data>
当运行CodedUI测试时,当它到达RecordedMethod时,它将为数据源中的每个日期条目运行一次。你可以有1个或10000个

我喜欢这种方法,因为它允许您在任何时候更改测试参数时修改简单的XML。这还允许非熟练的测试人员根据自己的需求更改测试,而不必涉猎代码


我希望这有帮助

谢谢,这将适用于一个场景。假设我想循环测试10次,并且在每个循环中,我想选择一个不同的从C#代码生成的日期,您对如何实现这一点有想法吗?你认为可以创建一个数组来保存多个C生成的日期吗?
this.UIMap.RecordedMethodParams.UITxtDateEditText =TestContext.DataRow["Date"].ToString();
this.UIMap.RecordedMethod();