我需要为Web应用程序中的用户角色创建一些测试。为了最小化描述,其中一个测试涉及检查是否为用户显示菜单条目。
对于此测试,我使用名为UserRoles的表,如下所示:
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”。该值是一个字符串,因此绑定会导致转换错误。
据我所知,我的选择是:
这让我想到了这个问题。还有另一种方式吗?
谢谢。
答案 0 :(得分:1)
因此,根本问题在于您无法控制数据绑定如何处理“位”数据类型,而是将其转换为字符串而不是bool。
我能想到的唯一解决方案(遗憾的是仍然有点破解,但并不像将FailIfFound更改为字符串那么严重)是创建WebTestPlugin,并在PreRequestDataBinding或PreRequest事件中,从字符串转换值布尔。不要忘记将插件添加到您的测试中(我犯了很多错误)。
然后,当创建验证规则时,它应该选择漂亮的新bool值并正常工作。
e.g。
string val = e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"].ToString();
e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"] = (val == "True");
我实际上没有尝试过这个......希望它有效。
编辑:第二轮......更好的解决方案
这是我开始做的事情,而且比在属性的编辑框中输入'True'或'False'更令人满意。