Зарегистрировать уже существующий тег элемента в WatiN ElementFactory - PullRequest
0 голосов
/ 29 декабря 2010

Я не удовлетворен существующей реализацией класса SelectList в WatiN, особенно метода Select или SelectByValue, который не вызывает событие onchange.

Я хочу создать свой собственный класс ZwtSelectList, который наследуется от SelectList и переопределить проблемные методы

[ElementTag("select")]
public class ZwtSelectList : SelectList
{
    public ZwtSelectList(DomContainer container, ElementFinder finder) : base(container, finder) { }

    public override void Select(string text)
    {
        base.Select(text);
        DomContainer.Eval(string.Format("$('#{0}').change()", Id));
    }
 }

Однако, когда я использую

ElementFactory.RegisterElementType(typeof(ZwtSelectList));

Я получаю

System.InvalidOperationException: Types SelectList and ZwtSelectList have both registered element tag 'SELECT'

Есть ли способ отменить регистрацию уже зарегистрированного тега? Или способ переопределить уже зарегистрированный тег?

Ответы [ 2 ]

0 голосов
/ 13 мая 2013

Обратите внимание, что WatiN запускает событие, называемое «onchange», которое отличается от события «change». Код автора действительно запускает событие «change» для элемента, но реализация WatiN Select() и его варианты не работают. Причина в том, что код WatiN 2.0 содержит ошибки и не запускает событие «change», а скорее событие «onchange», которое, вероятно, никто не привязывает к своим обработчикам событий.

Если бы эта ошибка была исправлена, можно было бы использовать Select() через ядро ​​WatiN, и она предположительно работала бы правильно.

0 голосов
/ 30 декабря 2010

В настоящее время регистрация собственного элемента в качестве замены собственного элемента WatiN не поддерживается. Но вы можете использовать:

browser.Element<ZwtSelectList>(Find.Any).Select(...);

Нетрудно изменить реализацию ElementFactory, чтобы разрешить повторную регистрацию пользовательского элемента для уже зарегистрированного элемента, если пользовательский элемент наследует исходный элемент, зарегистрированный для этого тега или тегов (так же, как вы это сделали с вашим списком выбора).

Я бы посоветовал получить последний код из репозитория SVN на SourceForge, потому что у меня исправлены проблемы с примером кода выше, начиная с WatiN RC1.

...