C# 如何解决ValidationRule类中的强制转换问题';财产?
我需要为web应用程序中的用户角色创建一些测试。为了最小化描述,其中一个测试涉及检查是否为用户显示菜单项 对于此测试,我使用一个名为UserRoles的表,如下所示:C# 如何解决ValidationRule类中的强制转换问题';财产?,c#,visual-studio-2010,.net-4.0,webtest,C#,Visual Studio 2010,.net 4.0,Webtest,我需要为web应用程序中的用户角色创建一些测试。为了最小化描述,其中一个测试涉及检查是否为用户显示菜单项 对于此测试,我使用一个名为UserRoles的表,如下所示: sUserName bDoesntHaveMenuX User1 1 User2 0 User3 1 bDoesntHaveMenuX是bit类型 我有一个从ValidationRule派生的类,该类基于XPath表达式检查页面中是否存在特定文本,以定位要在其中查找文本的节点。 此
sUserName bDoesntHaveMenuX
User1 1
User2 0
User3 1
bDoesntHaveMenuX是bit类型
我有一个从ValidationRule派生的类,该类基于XPath表达式检查页面中是否存在特定文本,以定位要在其中查找文本的节点。
此类的公共属性包括:
string XPathExpression
string Text
bool FailIfFound
最后一个命令指示在找到或未找到文本时规则是否应失败
在测试中,我为开头提到的表添加了一个名为DS的数据源。
对于我感兴趣的请求,我添加了一个验证规则类的新实例,其值如下:
Text=MenuX
XPathExpression=//div[@id='menu']//td
FailIfFound={{DS.UserRoles.bDoesntHaveMenuX}}
不幸的是,这不起作用。
原因似乎是数据绑定过程创建了一个上下文变量
DS.UserRoles.bDoesntHaveMenuX的值为“False”或“True”。该值是字符串,因此绑定会导致强制转换错误
就我所能想到的,我的选择是:
谢谢。所以最基本的问题是,您无法控制数据绑定如何处理“位”数据类型,它正在转换为字符串而不是布尔值 我能想到的唯一解决方案(遗憾的是,这仍然是一个小技巧,但没有将Failifound更改为string那么严重)是创建一个WebTestPlugin,并在PreRequestDataBinding或PreRequest事件中,将值从string转换为bool。别忘了将插件添加到测试中(我犯了一个很容易的错误) 然后,当创建验证规则时,它应该拾取新的bool值并正常工作 e、 g 我其实没试过这个。。。希望它能起作用
编辑:第二轮。。。更好的解决方案
这是我开始做的,比在属性的编辑框中键入“True”或“False”更令人满意。谢谢您的回答。使用WebTestPlugin是一个不错的主意,不知怎的,我忘记了但这种方法有两个缺点:1)似乎没有办法(或者我找不到)对ValidationRule的bool属性使用数据绑定。VisualStudio“属性”面板使用“真/假”下拉列表。因此,似乎我必须使用编码的webtest来实现这一点,这是我想要避免的。2) 必须为数据源中的所有布尔列维护上述代码。这也许可以通过反射来解决,但它开始变得非常复杂-/要点。。。没错,除了字符串类型之外,不能对属性进行数据绑定。出于这个原因,尽管它很难看并且需要更多的编码,但在我的自定义规则和插件中,我的大多数属性都使用字符串。关于(2),您可以简单地向WebTestPlugin添加一个属性,该属性采用数据源前缀(例如“DS.UserRoles”),然后专门查找以该字符串开头且具有“True”或“False”值的属性,然后将值转换为bool,如上所述。通过这种方式,它将不需要任何额外的工作就可以用于所有列。这应该是“只查找以该字符串开头的‘上下文参数’”。尽管我无法重现问题中描述的场景(我无法将布尔FailIfFound属性设置为False/True以外的任何值),我认为你的答案在这种情况下是非常相关的,所以我将把它标记为答案。谢谢
string val = e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"].ToString();
e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"] = (val == "True");