Я пытаюсь протестировать asp: DropDownList с помощью Watin, но когда я пытаюсь выбрать опцию из визуализированного SelectList, выдается исключение System.FormatException: строка не была распознана как допустимое логическое значение.
Код моей страницы:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="TesteSelect._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:DropDownList ID="ddl"
Width="75px" runat="server">
<asp:ListItem Text="Yes" Value="true" Selected="true"></asp:ListItem>
<asp:ListItem Text="No" Value="false"></asp:ListItem>
</asp:DropDownList>
</asp:Content>
И мои тесты:
using NUnit.Framework;
using WatiN.Core;
namespace Test
{
[TestFixture]
public class ATest
{
[Test]
public void Should_be_able_to_select_yes_from_ddl()
{
using( var browser = new IE())
{
browser.GoTo(Properties.Settings.Default.ServerAddress + "Default.aspx");
SelectList ddl = browser.SelectList(Find.ById("MainContent_ddl"));
ddl.Option("Yes").Select();
Assert.That(ddl.SelectedItem.Equals("Yes"));
}
}
[Test]
public void Should_be_able_to_select_no_from_ddl()
{
using (var browser = new IE())
{
browser.GoTo(Properties.Settings.Default.ServerAddress + "Default.aspx");
SelectList ddl = browser.SelectList(Find.ById("MainContent_ddl"));
ddl.Option("No").Select();
Assert.That(ddl.SelectedItem.Equals("No"));
}
}
}
}
Тест "Нет" проходит без проблем, но тест "Да" завершается неудачно с этим исключением, и эта трассировка стека:
ATest.Should_be_able_to_select_yes_from_ddl
: FailedSystem.FormatException:
Строка не была признана действительной
Boolean. в
System.Boolean.Parse (String value) в
WatiN.Core.Option.setSelected (Boolean
значение, Boolean WaitForComplete) в
WatiN.Core.Option.Select () в
Test.ATest.Should_be_able_to_select_yes_from_ddl ()
в ATest.cs: строка 16
Взгляните на исходный код, доступный здесь => http://watin.svn.sourceforge.net/viewvc/watin/trunk/src/Core/Option.cs?revision=1194&view=markup
Я вижу, что ошибка происходит в этом фрагменте строки 136:
...
134 private void setSelected(bool value, bool WaitForComplete)
135 {
136 if (bool.Parse(GetAttributeValue("selected")) == value) return;
137
138 SetAttributeValue("selected", value.ToString().ToLowerInvariant());
139 if (WaitForComplete)
140 {
141 ParentSelectList.FireEvent("onchange");
142 }
143 else
144 {
145 ParentSelectList.FireEventNoWait("onchange");
146 }
147 }
Когда я смотрю на сгенерированный HTML, это имеет смысл, так как это то, что отображается:
<select name="ctl00$MainContent$ddl" id="MainContent_ddl" style="width:75px;">
<option selected="selected" value="true">Yes</option>
<option value="false">No</option>
</select>
Таким образом, он не может разобрать "выбранный" в логическое значение, что имеет смысл. Как я могу пройти через это?