watin - Settings.FindByDefaultFactory - 似乎没有使用我的自定义FindByDefaultFactory

时间:2010-08-25 10:36:20

标签: asp.net watin webforms

基于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...
}

1 个答案:

答案 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...
    }

这不仅仅是我的愚蠢,而且我没有在原来的问题中包括这一点,所以其他任何人都无法确定这一点。给我双击。