﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-terrypang</title><link>http://www.blogjava.net/terrypang/</link><description>Automation with Java</description><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 11:57:20 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 11:57:20 GMT</pubDate><ttl>60</ttl><item><title>RFT Best Practices - 4. 对象操作</title><link>http://www.blogjava.net/terrypang/archive/2009/04/20/266576.html</link><dc:creator>terrypang</dc:creator><author>terrypang</author><pubDate>Mon, 20 Apr 2009 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/terrypang/archive/2009/04/20/266576.html</guid><wfw:comment>http://www.blogjava.net/terrypang/comments/266576.html</wfw:comment><comments>http://www.blogjava.net/terrypang/archive/2009/04/20/266576.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/terrypang/comments/commentRss/266576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrypang/services/trackbacks/266576.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-size:11.0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span></span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">找到对象之后，就需要对其进行操作了。在对对象进行操作之前，需要了解</span><span style="font-size:11.0pt">RFT</span><span lang="ZH-CN" style="font-size:11.0pt;
font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">处理对象的方式。根据</span><span style="font-size:11.0pt">RFT</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">的文档，</span><span style="font-size:11.0pt">Java</span><span lang="ZH-CN" style="font-size:11.0pt;
font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">对象的关系如下图：</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><img src="http://www.blogjava.net/images/blogjava_net/terrypang/Snap1.jpg" width="831" height="757" alt="" /><font class="Apple-style-span" size="4"><span class="Apple-style-span" style="font-size: 15px;"><br />
</span></font></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">由此可见，绝大多数的对象都是继承于</span><span style="font-size:11.0pt">GuiTestObject</span><span lang="ZH-CN" style="font-size:
11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">和</span><span style="font-size:11.0pt">GuiSubitemTestObject</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">。类似</span><span style="font-size:11.0pt">Button</span><span lang="ZH-CN" style="font-size:11.0pt;
font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">和</span><span style="font-size:11.0pt">CheckBox</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">这样的简单对象，自然是继承于</span><span style="font-size:11.0pt">GuiTestObject</span><span lang="ZH-CN" style="font-size:
11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">，而像</span><span style="font-size:11.0pt">List</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">和</span><span style="font-size:11.0pt">Table</span><span lang="ZH-CN" style="font-size:11.0pt;
font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">这样的有内部子对象的复杂对象，一定是继承于</span><span style="font-size:11.0pt">GuiSubitemTestObject</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">。根据这一规律，就可以分别建立你所需要的类了。</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="ZH-CN" style="font-size:11.0pt;
font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">负责</span><span lang="ZH-CN" style="font-size: 11pt; ">Button</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">的类如下：<font class="Apple-style-span" face="'Times New Roman'"></font></span></p>
<p class="MsoNormal"><font class="Apple-style-span" face="SimSun" size="4"><span class="Apple-style-span" style="font-size: 15px;">
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;framework.widgets;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Point;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.slf4j.Logger;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.slf4j.LoggerFactory;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.object.interfaces.GuiTestObject;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.object.interfaces.TestObject;<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;WButton&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;GuiTestObject&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;WButton(TestObject&nbsp;button)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">(button);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;click()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.click();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;click(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.click(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Point(x,&nbsp;y));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;doubleClick()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.doubleClick();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;isEnabled()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.isEnabled();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
</span></font></p>
<p class="MsoNormal"><span lang="ZH-CN" style="font-size: 11pt; font-family: SimSun; "><font class="Apple-style-span" face="'Times New Roman'"><font class="Apple-style-span" face="SimSun">
<p class="MsoNormal"><span style="font-size:11.0pt"><span style="mso-spacerun:yes">&nbsp;&nbsp; &nbsp;</span></span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">其他简单对象也可以继承</span><span style="font-size:11.0pt">ToggleGUITestObject</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">或</span><span style="font-size:11.0pt">TextScrollTestObject</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">等其他衍生于</span><span style="font-size:11.0pt">GuiTestObject</span><span lang="ZH-CN" style="font-size:
11.0pt;font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">类，这些类封装了很多实用的方法可以直接使用，具体请参考</span><span style="font-size:
11.0pt">RFT</span><span lang="ZH-CN" style="font-size:11.0pt;font-family:SimSun;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">文档中的</span><span style="font-size:11.0pt">API</span><span lang="ZH-CN" style="font-size:11.0pt;
font-family:SimSun;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">。</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal">&nbsp;&nbsp; &nbsp;负责TabPane的类如下：</p>
</font>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;framework.widgets;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.Vector;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.slf4j.Logger;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.slf4j.LoggerFactory;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.object.interfaces.GuiSubitemTestObject;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.object.interfaces.TestObject;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.script.Index;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.script.Text;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.vp.ITestData;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.vp.ITestDataElementList;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.rational.test.ft.vp.ITestDataList;<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;WTabbedPane&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;GuiSubitemTestObject&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;LoggerFactory.getLogger(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">WTabbedPane.class</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;WTabbedPane(TestObject&nbsp;tabbedPane)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">(tabbedPane);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;clickTab(String&nbsp;tabName)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.click(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Text(tabName));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;clickTab(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.click(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Index(index));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getTabCount()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Get&nbsp;tab&nbsp;count</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITestData&nbsp;data&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(ITestData)&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.getTestData(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">list</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITestDataList&nbsp;list&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(ITestDataList)&nbsp;data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;list.getElementCount();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;findTab(String&nbsp;text)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Find&nbsp;the&nbsp;index&nbsp;of&nbsp;tab&nbsp;{}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;contents&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.getAllTabs();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;contents.size();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(contents.get(i).toString().equals(text))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getTabText(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Get&nbsp;tab&nbsp;text&nbsp;with&nbsp;index&nbsp;{}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;index);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;contents&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.getAllTabs();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(index&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;index&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;contents.size())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(String)&nbsp;contents.get(index);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Vector&nbsp;getAllTabs()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Get&nbsp;all&nbsp;tabs</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITestDataList&nbsp;dataList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(ITestDataList)&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.getTestData(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">list</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ITestDataElementList&nbsp;elementList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(ITestDataElementList)&nbsp;dataList<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getElements();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;elementList.getElements();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
</font></span></p>
<p class="MsoNormal"><font class="Apple-style-span" size="4"><span class="Apple-style-span" style="font-size: 15px;"><span class="Apple-style-span" style="font-family: SimSun; ">&nbsp;&nbsp; &nbsp;由上面的例子可以看出来，对对象的操作可以分为两类：一类是施加行为，一类是读取数据。对此，RFT的API给出了详细的文档，例如对于List对象，文档如下：</span></span></font></p>
<p class="MsoNormal"><img src="http://www.blogjava.net/images/blogjava_net/terrypang/Snap2.jpg" border="0" alt="" /><font class="Apple-style-span" size="4"><span class="Apple-style-span" style="font-size: 15px;"></span></font></p>
<p class="MsoNormal"><span class="Apple-style-span" style="font-family: SimSun; font-size: 15px; ">&nbsp;&nbsp; &nbsp;由此可看出，对于List对象，可以通过.class, .classIndex, .itemCount, .itemText, .priorLabel，accessibleContext.accessibleName，name和toolTipText这些属性进行识别。获取List对象后，它支持Text和Index这两类子对象，可通过ITestDataList接口获得全部列表元素和已选列表元素。上面getAllTabs()方法就是用来获得所有Tab选项的，可以作为参考。</span></p>
<p class="MsoNormal"><font class="Apple-style-span" face="SimSun" size="4"><span class="Apple-style-span" style="font-size: 15px; ">&nbsp;&nbsp; &nbsp;还有一些更为复杂的简单对象，如：TextField和Frame，以及复杂对象，如：Table和Tree。如果你能够理解上述处理对象的方法，那么完全可以编写符合自己项目需要的方法，对这些对象进行各种各样的操作。</span></font></p>
<p class="MsoNormal"><font class="Apple-style-span" size="4"><span class="Apple-style-span" style="font-size: 15px;"><span class="Apple-style-span" style="font-family: SimSun; "><font class="Apple-style-span" face="'Times New Roman'" size="4"><span class="Apple-style-span" style="font-size: 16px;"><br />
</span></font><br />
</span></span></font></p>
<img src ="http://www.blogjava.net/terrypang/aggbug/266576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrypang/" target="_blank">terrypang</a> 2009-04-20 16:44 <a href="http://www.blogjava.net/terrypang/archive/2009/04/20/266576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RFT Best Practices - 3. 对象查找</title><link>http://www.blogjava.net/terrypang/archive/2009/03/31/263037.html</link><dc:creator>terrypang</dc:creator><author>terrypang</author><pubDate>Tue, 31 Mar 2009 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/terrypang/archive/2009/03/31/263037.html</guid><wfw:comment>http://www.blogjava.net/terrypang/comments/263037.html</wfw:comment><comments>http://www.blogjava.net/terrypang/archive/2009/03/31/263037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrypang/comments/commentRss/263037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrypang/services/trackbacks/263037.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="text-indent: 0.5in"><span lang="ZH-CN" style="font-size: 11pt; font-family: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何灵活查找窗体内的对象呢？和查找窗体类似，可以使用这些对象特有的属性，依照一定的查找逻辑进行处理。下面是一个典型的查找方法，以此为例进行说明：</span><span style="font-size: 11pt"><o:p></o:p></span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_52_761_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_761_Open_Text.style.display='none'; Codehighlighter1_52_761_Closed_Image.style.display='inline'; Codehighlighter1_52_761_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_52_761_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_52_761_Closed_Text.style.display='none'; Codehighlighter1_52_761_Open_Image.style.display='inline'; Codehighlighter1_52_761_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestObject&nbsp;getObject(ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v)&nbsp;</span><span id="Codehighlighter1_52_761_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_52_761_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootTO.waitForExistence(waitMaxTime,&nbsp;waitCheckInterval);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;returnObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;to[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;timeNow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis()&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;endTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;timeNow&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;waitMaxTime;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">showing</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img id="Codehighlighter1_364_735_Open_Image" onclick="this.style.display='none'; Codehighlighter1_364_735_Open_Text.style.display='none'; Codehighlighter1_364_735_Closed_Image.style.display='inline'; Codehighlighter1_364_735_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_364_735_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_364_735_Closed_Text.style.display='none'; Codehighlighter1_364_735_Open_Image.style.display='inline'; Codehighlighter1_364_735_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(returnObject&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;timeNow&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;endTime)&nbsp;</span><span id="Codehighlighter1_364_735_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_364_735_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rootTO.find(atDescendant((Property[])&nbsp;v.toArray(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property[</span><span style="color: #000000">0</span><span style="color: #000000">])));<br />
<img id="Codehighlighter1_464_592_Open_Image" onclick="this.style.display='none'; Codehighlighter1_464_592_Open_Text.style.display='none'; Codehighlighter1_464_592_Closed_Image.style.display='inline'; Codehighlighter1_464_592_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_464_592_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_464_592_Closed_Text.style.display='none'; Codehighlighter1_464_592_Open_Image.style.display='inline'; Codehighlighter1_464_592_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(to.length&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_464_592_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_464_592_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AmbiguousRecognitionException(</span><span style="color: #000000">"</span><span style="color: #000000">Find&nbsp;more&nbsp;than&nbsp;one&nbsp;object.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_617_648_Open_Image" onclick="this.style.display='none'; Codehighlighter1_617_648_Open_Text.style.display='none'; Codehighlighter1_617_648_Closed_Image.style.display='inline'; Codehighlighter1_617_648_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_617_648_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_617_648_Closed_Text.style.display='none'; Codehighlighter1_617_648_Open_Image.style.display='inline'; Codehighlighter1_617_648_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(to.length&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_617_648_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_617_648_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;to[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(waitCheckInterval);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeNow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis()&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;returnObject;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p style="text-indent: 0.5in"><span style="font-size: 11pt; color: black; font-family: SimSun">上面的方法根据传入的参数集合对当前窗口中的所有对象进行查找。和之前的窗体查找一样，最好显示的添加</span><span style="font-size: 11pt; color: black; font-family: 'Courier New'">showing=true</span><span style="font-size: 11pt; color: black; font-family: SimSun">参数，因为在</span><span style="font-size: 11pt; color: black; font-family: 'Courier New'">Swing</span><span style="font-size: 11pt; color: black; font-family: SimSun">程序的运行过程中，内存中会对</span><span style="font-size: 11pt; color: black; font-family: 'Courier New'">GUI</span><span style="font-size: 11pt; color: black; font-family: SimSun">元素进行缓存，可能一个界面消失了，但它还在内存中，等待着随后被显示。这样一来，就需要这个参数过滤到所有未被显示的</span><span style="font-size: 11pt; color: black; font-family: 'Courier New'">GUI</span><span style="font-size: 11pt; color: black; font-family: SimSun">元素。在实际使用过程中，可以使用如下的方法进行调用： （调用前使用RFT的对象查看器确定待查找对象的唯一属性）</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_41_354_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_354_Open_Text.style.display='none'; Codehighlighter1_41_354_Closed_Image.style.display='inline'; Codehighlighter1_41_354_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_41_354_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_354_Closed_Text.style.display='none'; Codehighlighter1_41_354_Open_Image.style.display='inline'; Codehighlighter1_41_354_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;WButton&nbsp;getButton(String&nbsp;name)&nbsp;</span><span id="Codehighlighter1_41_354_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_41_354_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.class</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">javax.swing.JButton</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">accessibleContext.accessibleName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;name));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;to&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;og.getObject(v);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">Utility.exists(to))<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObjectNotFoundException();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WButton(to);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 0.5in"><span lang="ZH-CN" style="font-size: 11pt; color: black; font-family: SimSun; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">与窗口处理一样，如果某些参数需要使用正则表达式处理，可以使用下面的方法：</span><span style="font-size: 11pt"><o:p></o:p></span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_42_399_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_399_Open_Text.style.display='none'; Codehighlighter1_42_399_Closed_Image.style.display='inline'; Codehighlighter1_42_399_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_399_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_42_399_Closed_Text.style.display='none'; Codehighlighter1_42_399_Open_Image.style.display='inline'; Codehighlighter1_42_399_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;WListBox&nbsp;getList(String&nbsp;label)&nbsp;</span><span id="Codehighlighter1_42_399_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_42_399_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegularExpression&nbsp;exp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RegularExpression(</span><span style="color: #000000">"</span><span style="color: #000000">.*JComboBox$|.*JList$</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.class</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;exp));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.priorLabel</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;label));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;to&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;og.getObject(v);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">Utility.exists(to))<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObjectNotFoundException();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WListBox(to);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
&nbsp;
<p style="text-indent: 0.5in"><span style="font-size: 11pt; color: black; font-family: SimSun">在对象查找过程中，可能需要各种不同的查找逻辑。例如，如果对象可能存在也可能不存在，在查找的时候就不需要等待并反复查找，这时候，可以使用如下的方法：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_63_440_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_440_Open_Text.style.display='none'; Codehighlighter1_63_440_Closed_Image.style.display='inline'; Codehighlighter1_63_440_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_63_440_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_440_Closed_Text.style.display='none'; Codehighlighter1_63_440_Open_Image.style.display='inline'; Codehighlighter1_63_440_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestObject&nbsp;getObjectWithoutWait(ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v)&nbsp;</span><span id="Codehighlighter1_63_440_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_63_440_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootTO.waitForExistence();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;returnObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">showing</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;to[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rootTO.find(atDescendant((Property[])&nbsp;v.toArray(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property[</span><span style="color: #000000">0</span><span style="color: #000000">])));<br />
<img id="Codehighlighter1_279_361_Open_Image" onclick="this.style.display='none'; Codehighlighter1_279_361_Open_Text.style.display='none'; Codehighlighter1_279_361_Closed_Image.style.display='inline'; Codehighlighter1_279_361_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_279_361_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_279_361_Closed_Text.style.display='none'; Codehighlighter1_279_361_Open_Image.style.display='inline'; Codehighlighter1_279_361_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(to.length&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_279_361_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_279_361_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AmbiguousRecognitionException(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Find&nbsp;more&nbsp;than&nbsp;one&nbsp;object.);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_385_414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_385_414_Open_Text.style.display='none'; Codehighlighter1_385_414_Closed_Image.style.display='inline'; Codehighlighter1_385_414_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_385_414_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_385_414_Closed_Text.style.display='none'; Codehighlighter1_385_414_Open_Image.style.display='inline'; Codehighlighter1_385_414_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(to.length&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_385_414_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_385_414_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;to[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;returnObject;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 0.5in"><span lang="ZH-CN" style="font-size: 11pt; color: black; font-family: SimSun; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'">有时候，界面上有多个具有相同属性的对象，只能通过他们的编号来区分他们；有时候需要以某个确定对象为根来进行查找；有时候需要查找直接子对象而不是所有子对象，等等。并且，这些逻辑之间也存在排列组合的情况，实际使用中可以根据自身需要灵活处理。这些方法都是对上面基本方法的扩展，大家可以尝试自己来实现。</span></p>
<img src ="http://www.blogjava.net/terrypang/aggbug/263037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrypang/" target="_blank">terrypang</a> 2009-03-31 09:31 <a href="http://www.blogjava.net/terrypang/archive/2009/03/31/263037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RFT Best Practices - 2. 窗体处理</title><link>http://www.blogjava.net/terrypang/archive/2009/03/21/261255.html</link><dc:creator>terrypang</dc:creator><author>terrypang</author><pubDate>Sat, 21 Mar 2009 12:57:00 GMT</pubDate><guid>http://www.blogjava.net/terrypang/archive/2009/03/21/261255.html</guid><wfw:comment>http://www.blogjava.net/terrypang/comments/261255.html</wfw:comment><comments>http://www.blogjava.net/terrypang/archive/2009/03/21/261255.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/terrypang/comments/commentRss/261255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrypang/services/trackbacks/261255.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">窗体是程序的基础。无论是主窗体，还是弹出窗体，他们往往都是需要首先定位的对象。窗体，作为一类特殊对象，他们都是根对象的直接子对象，针对这一特点，对他们定位就非常简单了。通常，通过窗体标题，就能很好的找到所需的窗体。具体方法如下。</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;waitCheckInterval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((Double)&nbsp;getOption(IOptionName.WAIT_FOR_EXISTENCE_DELAY_BETWEEN_RETRIES))&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.doubleValue();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;waitMaxTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((Double)&nbsp;getOption(IOptionName.MAXIMUM_WAIT_FOR_EXISTENCE))&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.doubleValue();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;TestObject&nbsp;rootTO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_353_1552_Open_Image" onclick="this.style.display='none'; Codehighlighter1_353_1552_Open_Text.style.display='none'; Codehighlighter1_353_1552_Closed_Image.style.display='inline'; Codehighlighter1_353_1552_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_353_1552_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_353_1552_Closed_Text.style.display='none'; Codehighlighter1_353_1552_Open_Image.style.display='inline'; Codehighlighter1_353_1552_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;getRootWithCaption(String&nbsp;captionExpr)&nbsp;</span><span id="Codehighlighter1_353_1552_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_353_1552_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;timeNow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis()&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;endTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;timeNow&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;waitMaxTime;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;rootTO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_534_1526_Open_Image" onclick="this.style.display='none'; Codehighlighter1_534_1526_Open_Text.style.display='none'; Codehighlighter1_534_1526_Closed_Image.style.display='inline'; Codehighlighter1_534_1526_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_534_1526_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_534_1526_Closed_Text.style.display='none'; Codehighlighter1_534_1526_Open_Image.style.display='inline'; Codehighlighter1_534_1526_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(rootTO&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;timeNow&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;endTime)&nbsp;</span><span id="Codehighlighter1_534_1526_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_534_1526_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RootTestObject&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;RootTestObject.getRootTestObject();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject[]&nbsp;ftWinObjects&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegularExpression&nbsp;exp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RegularExpression(captionExpr,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.captionText</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;exp));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.domain</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Java</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">showing</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftWinObjects&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root.find(atChild((Property[])&nbsp;v.toArray(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property[</span><span style="color: #000000">0</span><span style="color: #000000">])));&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1069_1396_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1069_1396_Open_Text.style.display='none'; Codehighlighter1_1069_1396_Closed_Image.style.display='inline'; Codehighlighter1_1069_1396_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1069_1396_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1069_1396_Closed_Text.style.display='none'; Codehighlighter1_1069_1396_Open_Image.style.display='inline'; Codehighlighter1_1069_1396_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ftWinObjects&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1069_1396_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1069_1396_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1115_1242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1115_1242_Open_Text.style.display='none'; Codehighlighter1_1115_1242_Closed_Image.style.display='inline'; Codehighlighter1_1115_1242_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1115_1242_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1115_1242_Closed_Text.style.display='none'; Codehighlighter1_1115_1242_Open_Image.style.display='inline'; Codehighlighter1_1115_1242_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ftWinObjects.length&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1115_1242_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1115_1242_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AmbiguousRecognitionException(</span><span style="color: #000000">"</span><span style="color: #000000">Find&nbsp;more&nbsp;windows&nbsp;with&nbsp;capture:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;captionExpr);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1289_1383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1289_1383_Open_Text.style.display='none'; Codehighlighter1_1289_1383_Closed_Image.style.display='inline'; Codehighlighter1_1289_1383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1289_1383_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1289_1383_Closed_Text.style.display='none'; Codehighlighter1_1289_1383_Open_Image.style.display='inline'; Codehighlighter1_1289_1383_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ftWinObjects.length&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1289_1383_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1289_1383_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootTO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ftWinObjects[</span><span style="color: #000000">0</span><span style="color: #000000">];&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1403_1517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1403_1517_Open_Text.style.display='none'; Codehighlighter1_1403_1517_Closed_Image.style.display='inline'; Codehighlighter1_1403_1517_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1403_1517_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1403_1517_Closed_Text.style.display='none'; Codehighlighter1_1403_1517_Open_Image.style.display='inline'; Codehighlighter1_1403_1517_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1403_1517_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1403_1517_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(waitCheckInterval);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeNow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis()&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面的方法首先取得对象查找的间隔时间、最大等待时间，并声明了空的窗体对象。接下来进入方法，根据查找结果和最大等待时间来循环查找窗体。先获得根测试对象，然后查找其直接子对象，查找条件为：窗体标题符合正则表达式</span><span lang="EN-US">captionExpr</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的定义，属于</span><span lang="EN-US">Java</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">域，并且当前为显示状态。最后处理查找结果，如果结果大于</span><span lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个，则抛出异常；如果结果等于</span><span lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则返回</span><span lang="EN-US">true</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；如果结果为空，则等待并重新计算时间，并继续循环查找；如果最后仍未空并退出循环，则返回</span><span lang="EN-US">false</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有的时候，窗口的出现并不是一定的，例如很多弹出窗口。这时候，对象查找并不需要循环等待，相应的方法应为：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_65_946_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_946_Open_Text.style.display='none'; Codehighlighter1_65_946_Closed_Image.style.display='inline'; Codehighlighter1_65_946_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_65_946_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_65_946_Closed_Text.style.display='none'; Codehighlighter1_65_946_Open_Image.style.display='inline'; Codehighlighter1_65_946_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;getRootWithCaptionWithoutWait(String&nbsp;captionExpr)&nbsp;</span><span id="Codehighlighter1_65_946_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_65_946_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;rootTO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;sleep(waitCheckInterval);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;RootTestObject&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;RootTestObject.getRootTestObject();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TestObject[]&nbsp;ftWinObjects&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;RegularExpression&nbsp;exp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RegularExpression(captionExpr&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">$</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Property</span><span style="color: #000000">&gt;</span><span style="color: #000000">();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.captionText</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;exp));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">.domain</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Java</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;v.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property(</span><span style="color: #000000">"</span><span style="color: #000000">showing</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ftWinObjects&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root.find(atChild((Property[])&nbsp;v.toArray(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Property[</span><span style="color: #000000">0</span><span style="color: #000000">])));&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_625_920_Open_Image" onclick="this.style.display='none'; Codehighlighter1_625_920_Open_Text.style.display='none'; Codehighlighter1_625_920_Closed_Image.style.display='inline'; Codehighlighter1_625_920_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_625_920_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_625_920_Closed_Text.style.display='none'; Codehighlighter1_625_920_Open_Image.style.display='inline'; Codehighlighter1_625_920_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ftWinObjects&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_625_920_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_625_920_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_667_786_Open_Image" onclick="this.style.display='none'; Codehighlighter1_667_786_Open_Text.style.display='none'; Codehighlighter1_667_786_Closed_Image.style.display='inline'; Codehighlighter1_667_786_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_667_786_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_667_786_Closed_Text.style.display='none'; Codehighlighter1_667_786_Open_Image.style.display='inline'; Codehighlighter1_667_786_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ftWinObjects.length&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_667_786_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_667_786_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AmbiguousRecognitionException(</span><span style="color: #000000">"</span><span style="color: #000000">Find&nbsp;more&nbsp;windows&nbsp;with&nbsp;capture:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;captionExpr);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_829_911_Open_Image" onclick="this.style.display='none'; Codehighlighter1_829_911_Open_Text.style.display='none'; Codehighlighter1_829_911_Closed_Image.style.display='inline'; Codehighlighter1_829_911_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_829_911_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_829_911_Closed_Text.style.display='none'; Codehighlighter1_829_911_Open_Image.style.display='inline'; Codehighlighter1_829_911_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ftWinObjects.length&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_829_911_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_829_911_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootTO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ftWinObjects[</span><span style="color: #000000">0</span><span style="color: #000000">];&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样一来，就可以用统一的方法来进行窗体的查找。具体代码如下：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_57_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_219_Open_Text.style.display='none'; Codehighlighter1_57_219_Closed_Image.style.display='inline'; Codehighlighter1_57_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_57_219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_57_219_Closed_Text.style.display='none'; Codehighlighter1_57_219_Open_Image.style.display='inline'; Codehighlighter1_57_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;ExistWin(String&nbsp;winName,&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;wait)&nbsp;</span><span id="Codehighlighter1_57_219_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_57_219_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;release();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(wait)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;og.getRootWithCaption(winName);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;og.getRootWithCaptionWithoutWait(winName);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_281_331_Open_Image" onclick="this.style.display='none'; Codehighlighter1_281_331_Open_Text.style.display='none'; Codehighlighter1_281_331_Closed_Image.style.display='inline'; Codehighlighter1_281_331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_281_331_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_281_331_Closed_Text.style.display='none'; Codehighlighter1_281_331_Open_Image.style.display='inline'; Codehighlighter1_281_331_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isDialog(String&nbsp;caption,&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;wait)&nbsp;</span><span id="Codehighlighter1_281_331_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_281_331_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.ExistWin(caption,&nbsp;wait);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;</span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前一个方法利用传入的窗体标题正则表达式，和窗体查找逻辑，进行窗体查找。后一个方法对其进行调用，返回是否查找成功的结果。事实上，这两个方法完全可以写成一个，但是在设计框架时，应考虑到自动化操作的各个环节，应把每一个环节独立开来，才能具有最大的灵活性。根据我的经验，对对象的查找和查找后的操作应独立成两个不同类来完成，其中对对象的查找应为一个</span><span lang="EN-US">RFT</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">super class</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。其实也就是继承了</span><span lang="EN-US">RationalTestScript</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的抽象类，对对象的操作应为一个</span><span lang="EN-US">Script</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个</span><span lang="EN-US">Script</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US">super class</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应为自己之前定义的对象查找类，而不是默认的</span><span lang="EN-US">RationalTestScript</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这一部分后面还会讲到。</span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当需要关闭可能出现的错误窗口时，可以这样使用：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_40_71_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_71_Open_Text.style.display='none'; Codehighlighter1_40_71_Closed_Image.style.display='inline'; Codehighlighter1_40_71_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_40_71_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_40_71_Closed_Text.style.display='none'; Codehighlighter1_40_71_Open_Image.style.display='inline'; Codehighlighter1_40_71_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(aDialog.isDialog(</span><span style="color: #000000">"</span><span style="color: #000000">.*Error</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">))&nbsp;</span><span id="Codehighlighter1_40_71_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_40_71_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;aDialog.close();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当需要操作一定出现的窗口时，可以这样使用：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_39_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_79_Open_Text.style.display='none'; Codehighlighter1_39_79_Closed_Image.style.display='inline'; Codehighlighter1_39_79_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_39_79_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_79_Closed_Text.style.display='none'; Codehighlighter1_39_79_Open_Image.style.display='inline'; Codehighlighter1_39_79_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(aDialog.isDialog(</span><span style="color: #000000">"</span><span style="color: #000000">Warning</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">))&nbsp;</span><span id="Codehighlighter1_39_79_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_79_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;aDialog.clickButton(</span><span style="color: #000000">"</span><span style="color: #000000">Yes</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;</span></div>
&nbsp;
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">至此，所有针对窗体的处理逻辑就基本完整了。当然，可能有些被测程序可以同时打开多个实例，这就需要支持同时获取并操作多个具有相同标题的窗体。这样的问题大家可以一同探讨如何处理。</span></p>
<img src ="http://www.blogjava.net/terrypang/aggbug/261255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrypang/" target="_blank">terrypang</a> 2009-03-21 20:57 <a href="http://www.blogjava.net/terrypang/archive/2009/03/21/261255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RFT Best Practices - 1. 引言</title><link>http://www.blogjava.net/terrypang/archive/2009/03/21/261254.html</link><dc:creator>terrypang</dc:creator><author>terrypang</author><pubDate>Sat, 21 Mar 2009 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/terrypang/archive/2009/03/21/261254.html</guid><wfw:comment>http://www.blogjava.net/terrypang/comments/261254.html</wfw:comment><comments>http://www.blogjava.net/terrypang/archive/2009/03/21/261254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/terrypang/comments/commentRss/261254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/terrypang/services/trackbacks/261254.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">经过这些年的使用，我认为</span>RFT<span style="font-family: 宋体">是一个十分优秀的自动化测试工具。尤其是目前的</span>7.0.1.2<span style="font-family: 宋体">版本，已经非常稳定，非常好用了。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">与大多数其它自动化测试工具一样，</span>RFT<span style="font-family: 宋体">提供了很多基础设施，例如：对象的映射、动作的录制</span>/<span style="font-family: 宋体">回放、检查点、数据池、</span>Html<span style="font-family: 宋体">或</span>TxT<span style="font-family: 宋体">格式的报告等等。这些基础设施确实能够大幅度提升这一工具的上手速度，但是我以为，正是这些基础设施使得</span>RFT<span style="font-family: 宋体">的使用者在使用过程中忽略了对这些基础设施背后内容的了解，以至于出现了问题束手无策。其实，</span>RFT<span style="font-family: 宋体">是一个开放的自动化测试开发平台，几乎所有他所提供的基础设施都有相应的</span>API<span style="font-family: 宋体">暴露给使用者，只要用好这些</span>API<span style="font-family: 宋体">，就能够非常轻松的定制出适合自己的自动化测试框架，运行中出现问题也非常容易定位分析。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">使用</span>RFT<span style="font-family: 宋体">有一段时间的人，应该知道</span>IBM<span style="font-family: 宋体">有一个</span>ITCL<span style="font-family: 宋体">库，是专门针对</span>RFT<span style="font-family: 宋体">的，他封装了很多有用的方法，形成了一套开发框架，能够明显提高开发效率。不过，遗憾的是，这个库非常的老（大部分类生成日期都是</span>05<span style="font-family: 宋体">年），如果你使用最新的</span>RFT7.0<span style="font-family: 宋体">，由于很多底层</span>API<span style="font-family: 宋体">都变化了，这个库有不少部分都不能用了。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">如果你仔细阅读过这个库，你就会发现</span>RFT<span style="font-family: 宋体">是一个多么灵活的工具，也正因为这一点，很多人都不明白如何能够正确的使用</span>RFT<span style="font-family: 宋体">。在我看来，</span>RFT<span style="font-family: 宋体">使用的最佳实践就是开发属于自己的测试框架。只有这样才能发挥</span>RFT<span style="font-family: 宋体">的真正威力。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">利用这个系列，我结合手头的一个</span>Swing<span style="font-family: 宋体">界面的项目，介绍一下如何开发自己的测试框架。（</span>Swing<span style="font-family: 宋体">项目，运行之间不要忘记</span>Enable Jvm<span style="font-family: 宋体">）。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">这里，作为测试框架，不应使用对象映射，而应该完全依赖于动态查找。这是因为它严重依赖</span>RFT<span style="font-family: 宋体">提供的基础设施，灵活性很差。具体内容随后将逐一介绍。</span></p>
 <img src ="http://www.blogjava.net/terrypang/aggbug/261254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/terrypang/" target="_blank">terrypang</a> 2009-03-21 20:48 <a href="http://www.blogjava.net/terrypang/archive/2009/03/21/261254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>