如何解决ValidationRule类中的强制转换问题'属性

本文关键字:转换 问题 属性 何解决 解决 ValidationRule | 更新日期: 2023-09-27 18:10:07

我需要为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"。该值是一个字符串,因此绑定会导致类型转换错误。

我的选择,就我所能想到的,是:

  1. 更改验证规则以接受failifound的字符串。无效选项,有两个原因:它是一个hack,并且在其他地方。
  2. 创建一个新的验证规则,将使用上面提到的规则,并将failifffound实现为字符串。我也不喜欢这个,因为原因和上面一样。这是一个黑客。
  3. 在传递数据之前对测试进行编码并进行适当的强制转换到验证规则。我不喜欢这个,因为我更喜欢只有在没有其他方法的情况下才将测试编码。

这就引出了我的问题。还有别的办法吗?

谢谢。

如何解决ValidationRule类中的强制转换问题'属性

所以根本的问题是你无法控制数据绑定如何处理'bit'数据类型,它被转换为字符串而不是bool。

我能想到的唯一的解决方案(这是可悲的仍然有点hack,但不是那么令人震惊的改变failifffound到字符串)是创建一个WebTestPlugin,并在先决条件databinding或先决条件事件,转换值从字符串到bool。不要忘记在你的测试中添加插件(我犯了一个容易的错误)。

然后,当验证规则被创建时,它应该捡起漂亮的新bool值并正确工作。

  string val = e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"].ToString();
  e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"] = (val == "True");

我实际上没有尝试这个…希望它能奏效。


编辑:第二轮…更好的解决方案

  1. 将failifffound属性更改为string(在您提到的子类中),因此它可以与数据绑定正常工作。
  2. 实现一个TypeConverter,它为规则的PropertyGrid (True, False)中的属性提供一个有效值的下拉列表,因此在GUI中它看起来与将failifffound作为bool值的规则相同。你仍然可以在必要时在框中输入你自己的值(例如数据绑定)。
  3. 将包含TypeConverter代码的.dll的路径添加到您的测试项目的References部分。

这就是我开始做的,这比在属性的编辑框中输入'True'或'False'要令人满意得多。