基於this article,我寫了一個實現Watin.Core.interfaces.IFindByDefaultFactory的自定義類,但我認爲我沒有正確將其分配給watin設置,因爲它從不使用。watin - Settings.FindByDefaultFactory - 似乎沒有使用我自定義的FindByDefaultFactory
基本上,我應該在哪裏/什麼時候分配給Settings.FindByDefaultFactory?我在我的測試安裝程序和文本夾具的構造函數中嘗試過,但都沒有導致我的自定義類被使用。測試仍然運行,但我必須使用完整的asp.net標識。
我在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...
而這就是我的自定義查找默認出廠樣子(簡體),不幸的是,它永遠不會被調用。
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...
}