将数据表转换为字符串 - 正在生成此错误'string'该错误不包含'UserCode'的定义



我有一个带有数据表的功能文件。传递值UserCode='0001'时,它正在将其转换为"1"。因此,我在以下行中添加了.ToString()方法:dynamic data = table.CreateDynamicInstance().ToString();

现在我得到以下错误:

"字符串"不包含"用户代码"的定义

功能文件

And I add a user Code
| UserCode|
| 0001    |

步骤定义

[Then(@"I add a User Code")]
public void ThenIAddAUserCode(Table table)
{
dynamic data = table.CreateDynamicInstance().ToString();
// string str = Convert.ToString(data);
// DocM.AddUserCode((string)data.UserCode);
DocM.AddUserCode(data.UserCode);
}

页面方法

public void AddUserCode(string usercode)
{
IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
//find the invisible element on the list by xpath/tag etc. 
var path = By.XPath("//table[@id='DocMP']/tbody/tr[1]//td[1]//input[@value='" + usercode+ "']");

var Userpath = driver.FindElement(path);
MyFunc.WaitFor(driver, path);
//use javascript to  navigate to that element
je.ExecuteScript("arguments[0].scrollIntoView(false);", Userpath);
MyFunc.HighlightElement(driver, Userpath);
if (Userpath.Displayed)
{
Userpath.Click();
btnApply.Click();
}
}

有人能帮忙吗。我是c#和specflow的新手。

在C#中将数据表转换为dynamic时,SpecFlow会尽力猜测数据类型。在这种情况下,SpecFlow似乎猜测只包含数字的字符串很可能是int,当然它会从0001中去掉前导零。相反,考虑创建一个数据传输对象来表示数据表中的数据:
public class X
{
public string UserCode { get; set; }
}

并更改步骤定义以创建此类的新实例(请参见Table.CreateInstance()方法)。我看不到足够的场景来建议一个名称,所以用一个对您的用例有意义的名称替换public class X。对于从SpecFlow中的数据表映射的类,我通常使用RowDataTableRow后缀。例如,如果数据表表示一篇博客文章,我会将DTO命名为BlogPostRowBlogPostDataTableRow

步骤定义应更改为:

[Then(@"I add a User Code")]
public void ThenIAddAUserCode(Table table)
{
X data = table.CreateInstance<X>();
DocM.AddUserCode(data.UserCode);
}

如果你只需要在步骤中传递用户代码,我建议你使用一个引号:

And I add a user Code "0001"

如果您自动生成步骤,SpecFlow仍然会猜测0001int,因此以下步骤定义应该有效:

[Then(@"I add a User Code ""(.*)""")]
public void ThenIAddAUserCode(string userCode)
{
DocM.AddUserCode(userCode);
}

相关内容

最新更新