Основываясь на этой статье , я написал собственный класс, который реализует Watin.Core.interfaces.IFindByDefaultFactory, но я не думаю, что правильно назначаю его настройкам watin, потому что он никогда не используется.
В основном, где и когда я должен назначить для Settings.FindByDefaultFactory? Я пробовал в своей тестовой установке и конструкторе текстового фиксатора, но ни один из них не вызывает использование моего пользовательского класса. Тесты все еще работают и работают, но я должен использовать полные идентификаторы asp.net.
Я использую Watin 2.0.15.928 в VS2008 от nUnit 2.5.2.9222. Я использую 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);
}
}
}
Редактировать: Дополнительная информация после факта.
Исходя из того, что я это выдумал (см. Ответ ниже), оказалось, что то, как я потреблял Ватина, чтобы найти элементы, было неверным. Я явно вызывал Find.ById вместо того, чтобы позволить выполнению действия по умолчанию. Поэтому я переназначил значение по умолчанию, но потом не смог его использовать!
[Test]
public void StepOneFromHomepageShouldRedirectToStepTwo()
{
_ie.TextField(Find.ById("textBoxId")).TypeText("100");
//Other test stuff...
}