Как справиться с атрибутами readonly и selected в WatiN 2.0 против IE9

Я использую WatiN для веб-тестирования и сталкиваюсь с проблемами, вызванными тем фактом, что для атрибута «только для чтения» элементов INPUT WatiN пытается проанализировать значение как логическое, что в случае Я могу сказать, что это неверно, так как атрибут должен быть записан следующим образом:

‹Input readonly =" только для чтения "/>

Когда я пытаюсь получить доступ к свойству TextField.Readonly из WatiN во время выполнения, выдается ошибка, потому что WatiN пытается проанализировать «только для чтения» как логическое значение. Я также столкнулся с аналогичной проблемой с атрибутом selected элемента <option>.

Мне трудно поверить, что никто другой не сталкивался с этими базовыми сценариями использования WatiN, что заставляет меня думать, что я упускаю что-то очевидное. Есть ли известный способ решения этих проблем или это известная проблема с WatiN?


person Jim Liddell    schedule 04.04.2011    source источник


Ответы (2)


Эта проблема связана с тем, что IE9, показывающий страницу в режиме IE9mode, сильно отличается от того, как ведет себя IE9 в режиме IE8 (и более старых версиях IE). Эти проблемы были исправлены в WatiN 2.1.

person Jeroen van Menen    schedule 12.04.2011
comment
Спасибо, Jeroen - я только что обновился до версии 2.1, и она действительно устранила проблемы IE9. Большое Вам спасибо. - person Jim Liddell; 13.04.2011

Синтаксис readonly = "readonly", который вы упомянули, определенно верен в соответствии со школой w3c, и похоже, что вы действительно нашли ошибку.

Если посмотреть на /trunk/src/Core/TextField.cs в строке 57, код будет

 public virtual bool ReadOnly
 {
   get
   {
     var value = GetAttributeValue("readOnly");
     return string.IsNullOrEmpty(value) ? false : bool.Parse(value);
   }
 }

так что вам, вероятно, следует просто изменить его на что-то вроде этого, хотя я не использую причуду? и: синтаксис :-)

 public virtual bool ReadOnly
 {
   get
   {
     string value = GetAttributeValue("readOnly");
     if (value.ToLower() == "readonly")
     {
       return true;
     }
     else
     {
        return false;
     }
   }
 }
person Bruce McLeod    schedule 04.04.2011
comment
Спасибо, я уже заметил реализацию через Reflector, но мне бы не пришлось изменять исходный код, если я могу этого избежать. Мне было интересно, была ли это известная проблема или мне что-то не хватало. - person Jim Liddell; 05.04.2011