2012-04-27 98 views
0

我目前正在尝试设置WatiN来对新的CRM解决方案进行一些自动化测试。我们有一个称为高级查找的屏幕按钮。
单击此按钮时,会弹出一个新弹出窗口。这个弹出窗口有一个下拉菜单,我想单击它并从中选择选项。WatiN - 从弹出窗口中选择下拉菜单

对弹出窗口的代码是:

td class="ms-crm-AdvFind-Label"><br> 
td class="ms-crm-AdvFind-EntityList"> <br> 
select name="slctPrimaryEntity" class="ms-crm-SelectBox " id="slctPrimaryEntity"  Sort="ascending" defaultSelected="activitypointer"><br> 
option title="Organisations" value="account"> 

的华廷代码,我有如下:

ie.Image(Find.ByClass("ms-crm-ImageStrip-advancedfind32")).Click(); 
IE poppedUpBrowser = IE.AttachTo<IE>(Find.ByTitle("Advanced Find - Microsoft Dynamics CRM")); 
SelectList ddl = poppedUpBrowser.SelectList(Find.ByClass("ms-crm-AdvFind-Label")&(Find.ById("slctPrimaryEntity")));<br> 
ddl.Option("Organisations").Select();<br> 
Assert.That(ddl.SelectedItem.Equals("Organisations"));<br> 

可有人请指出哪里出了问题。

谢谢。

编辑:

运行测试时,我目前收到此错误信息:

Failure: WatiN.Core.Exceptions.ElementNotFoundException : Could not find OPTION element tag matching criteria: Attribute 'innertext' equals 'Organisations' ignoring case at http://website 

Stack Trace: 
at WatiN.Core.Element.get_NativeElement() 
at WatiN.Core.Element.GetAttributeValueImpl(String attributeName) 
at WatiN.Core.Component.GetAttributeValue(String attributeName) 
at WatiN.Core.Option.setSelected(Boolean value, Boolean WaitForComplete) 
at WatiN.Core.Option.Select() 

编辑:更多的HTML代码:

<tbody> 
<tr height="100%"> 
<td class="AdvFind_td_FindBody"> 
<span id="advancedFind"> 
<table class="ms-crm-AdvFindControl" id="advFind" cellSpacing="0" cellPadding="0" EntityName="activitypointer" UIProvider="" DataProvider="" EntityTypeCode="4200" DisableValueControlInSimpleMode="0" DistinctFetch="1" SaveChangesAlert="1" IncludeUserQuery="1" IncludeSystemQuery="1" ValidQueryType="0" FilterControlVisible="1" TitleVisible="0" EntityListVisible="1" RelatedEntitiesVisible="1" QueryListVisible="1" CanCreateUserQuery="1" CanWriteUserQuery="1" IncludeAPIQuery="0" FetchMode="2" Buttons="1023" Modes="3" Mode="1" aliasesInInitialFetch=""> 
<tbody> 
<tr class="ms-crm-AdvFind-TitleArea"> 
<td> 
<table class="ms-crm-AdvFind-Title-table" style="table-layout: fixed;"> 
<tbody> 
<tr> 
<td> 
<table> 
<tbody> 
<tr> 
<td class="ms-crm-AdvFind-EntityList"> 
<select name="slctPrimaryEntity" class="ms-crm-SelectBox " id="slctPrimaryEntity" Sort="ascending" defaultSelected="activitypointer"> 
<option title="Activities" value="activitypointer"> 
<option title="Addresses" value="customeraddress"> 

回答

0

是框架内的弹出窗口。如果是这样,你将需要从框架遍历。 让我知道它是怎么回事。

+0

是的,弹出框架上有一个框架,我发现并使用下面的信息选择该项目。 – user1361245 2012-05-29 15:46:59

0

更改断言到

Assert.That(ddl.SelectedItem.Text.Equals("Organisations")); 

Se lectedItem的类型为Option,其中“组织”的类型为String,因此您无法比较这两个值。通过使用Text属性,您将获得所需的结果。

编辑:至于你的编辑老话 - 是的,你没有一个元素与文字“组织”。您必须通过使用您拥有的现有属性(标题或值)来找到要选择的内容。因此,对于错误的解决方法是使用Find类:

ddl.Option(Find.ByTitle("Organisations")).Select(); 

ddl.Option(Find.ByValue("account")).Select(); 
+0

嗨,感谢您的帮助。
正如你所建议的那样,我仍然像上面那样用新行得到同样的错误。
还有什么我可以尝试的。如果需要,我可以从网站添加更多代码。谢谢。 – user1361245 2012-05-02 09:42:25

+0

那么选择列表的html会有帮助 – t3hn00b 2012-05-02 09:47:31

+0

如果SelectList是由javascript创建的,那么会有问题吗?当我使用F12开发人员工具查看页面时,我得到了生成的HTML,但是如果我查看页面DOM,则可以使用它的全部脚本。 – user1361245 2012-05-02 10:44:37