watin - Settings.FindByDefaultFactory - похоже, не использует мой собственный FindByDefaultFactory - PullRequest
0 голосов
/ 25 августа 2010

Основываясь на этой статье , я написал собственный класс, который реализует 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...
}

1 Ответ

0 голосов
/ 25 августа 2010

Правильно, я понял это, и я был идиотом и явно вызывал метод 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...
    }

Мало того, что я был глуп, но я не включил это в свой первоначальный вопрос, так что никто другой не смог бы понятьэто наверняка.Двойные шлепки для меня.

...