基于this article,我编写了一个实现Watin.Core.interfaces.IFindByDefaultFactory的自定义类,但我认为我没有正确地将它分配给watin设置,因为它永远不会使用
基本上,我应该在哪里/什么时候分配给Settings.FindByDefaultFactory?我已经尝试过我的测试安装程序和文本夹具的构造函数,但似乎都不会导致我的自定义类被使用。测试仍然运行和工作,但我必须使用完整的asp.net ID。
我在nUnit 2.5.2.9222中使用VS2008中的Watin 2.0.15.928。我以管理员身份运行visual studio,只要我不依赖自定义查找逻辑,测试就会成功运行。
这是我的文本夹具的开头是什么样的,我在哪里设置了FindByDefaultFactory
namespace Fundsmith.Web.Main.BrowserTests
{
[TestFixture]
class WatinHomepageTests
{
private IE _ie;
[SetUp]
public void Setup()
{
Settings.FindByDefaultFactory = new FindByAspIdFactory();
_ie = new IE("http://localhost/somepage.aspx");
}
//etc etc...
这就是我的自定义Find By Default工厂看起来像(简化),不幸的是,它从未被调用过。
using System.Text.RegularExpressions;
using WatiN.Core;
using WatiN.Core.Constraints;
using WatiN.Core.Interfaces;
namespace Fundsmith.Web.Main.BrowserTests
{
public class FindByAspIdFactory : IFindByDefaultFactory
{
public Constraint ByDefault(string value)
{
// This code is never called :(
// My custom find by id code to cope with asp.net webforms ids...
return Find.ById(value);
}
public Constraint ByDefault(Regex value)
{
return Find.ById(value);
}
}
}
编辑:事后的额外信息。
基于我这样做,(见下面的答案),事实证明我消耗Watin找到元素的方式是错误的。我明确地调用了Find.ById,而不是让默认操作发生。所以我重新分配了默认值,但后来没有使用它!
[Test]
public void StepOneFromHomepageShouldRedirectToStepTwo()
{
_ie.TextField(Find.ById("textBoxId")).TypeText("100");
//Other test stuff...
}
答案 0 :(得分:0)
是的,我已经想出了这个,而且我是一个白痴并明确调用Find.ById方法,而不是让默认动作发生。似乎测试设置是设置FindByDefaultFactory的好地方。
即,我这样做(错误):
[Test]
public void StepOneFromHomepageShouldRedirectToStepTwo()
{
_ie.TextField(Find.ById("textBoxId")).TypeText("100");
//Other test stuff...
}
当我应该这样做的时候。 (没有明确的“Find.ById”)
[Test]
public void StepOneFromHomepageShouldRedirectToStepTwo()
{
_ie.TextField("textBoxId").TypeText("100");
//Other test stuff...
}
这不仅仅是我的愚蠢,而且我没有在原来的问题中包括这一点,所以其他任何人都无法确定这一点。给我双击。