脚本驱动设计搞的修改版
上次发的基于脚本驱动的自动化测试方案,在这几天的思考之后终于得到了比较满意的方案。在原来的factory模式和bridge模式的基础上又引入了singleton模式。之所以要引入singleton模式的主要原因是问了解决全局数据访问的问题。原先的方案在controlObject级别的对象竟然要跨层次的去访问AppEveriment的数据,这样导致了强耦合。这也是原来方案的最大不足。引入了singleton模式后将读取xml配置文件的工作交给了两个集合:class ControlsCollection 和 class CasesCollection。这两个对象作为全局数据存在提供各个对象对数据的查询操作。在修改方案钟,我有引入了类别属性概念,ControlAttribute 和 StepAttribute这两个基类对象,用于接口的统一访问,这样在使得有新类别加入的时候不用修改已有的接口。
在这次的修改方案中,还有一点比较重要的是我将窗体的管理使用一个单独的类来处理,由于窗体是所有控件的容器所以处理起来比较特殊,因此不便于跟其他控件一起处理,并且窗体的产生都是在操作控件之前的。我将窗体管理类命名为:WinManager 它主要完成如下工作:
/// <summary>
/// singleton pattern
/// this class can do the jobs
/// 1) Collect the opened window of the application
/// 2) Remove the all of window of the application
/// 3) Get the window by FormAttribute
/// </summary>
并且在这次的修改方案中对整个测试脚本的xml文件格式也进行了比较大的修改,主要是原先的脚本内容和字段命名多比较的含糊。
对Controls.xml文件也进行了规范化, 让它只支持三个字段的访问,automationId, className和name
在这次的修改方案中,还有一点比较重要的是我将窗体的管理使用一个单独的类来处理,由于窗体是所有控件的容器所以处理起来比较特殊,因此不便于跟其他控件一起处理,并且窗体的产生都是在操作控件之前的。我将窗体管理类命名为:WinManager 它主要完成如下工作:
/// <summary>
/// singleton pattern
/// this class can do the jobs
/// 1) Collect the opened window of the application
/// 2) Remove the all of window of the application
/// 3) Get the window by FormAttribute
/// </summary>
并且在这次的修改方案中对整个测试脚本的xml文件格式也进行了比较大的修改,主要是原先的脚本内容和字段命名多比较的含糊。
<?xml version="1.0" encoding="utf-8"?>
<App>
<ExcludedControls>
<Control id="MainMenu" />
</ExcludedControls>
<Case title="testWordPadSetting" savePath=".">
<Script driver="Monad"/>
<Control id="View" action="click" owner="MainMenu"/>
<Control id="Options" action="click" owner="MainMenu" waiter="Options"/>
<Control id="OK" action="click" waiter="MainForm"/>
<Control id="RichEdit" action="sendKeys" value="Hello World!" />
<Control id="RichEdit" action="sendKeys" value="^a" />
<Control id="FontComboBox" action="SelectedIndex" value="16" owner="Formatting"/>
<UICapture title="myScreenShot" rootControlId=""/>
</Case>
</App>
这是case文件,<App>
<ExcludedControls>
<Control id="MainMenu" />
</ExcludedControls>
<Case title="testWordPadSetting" savePath=".">
<Script driver="Monad"/>
<Control id="View" action="click" owner="MainMenu"/>
<Control id="Options" action="click" owner="MainMenu" waiter="Options"/>
<Control id="OK" action="click" waiter="MainForm"/>
<Control id="RichEdit" action="sendKeys" value="Hello World!" />
<Control id="RichEdit" action="sendKeys" value="^a" />
<Control id="FontComboBox" action="SelectedIndex" value="16" owner="Formatting"/>
<UICapture title="myScreenShot" rootControlId=""/>
</Case>
</App>
对Controls.xml文件也进行了规范化, 让它只支持三个字段的访问,automationId, className和name
<?xml version="1.0" encoding="utf-8" ?>
<Application name="WordPad.exe">
<Form refName="MainForm" class=" WordPadClass">
<Control refName="Formatting" id="59396" controlType="ToolBar"/>
<Control refName="Standard" id="59392" controlType="ToolBar"/>
<Control refName="RichEdit" id="59648" controlType="Document"/>
<Control refName="MainMenu" id="MenuBar" controlType="MenuBar" />
<Control refName="FontComboBox" id="165" controlType="ComboBox"/>
<Control refName="FontDropDownButton" id="DropDown" controlType ="Button"/>
<Control refName="FontListBox" id="ListBox" controlType="List"/>
</Form>
<Form refName="Options" class="#32770">
<Control refName="OK" id="1" controlType="Button"/>
<Control refName="NoWarp" id="1027" controlType="RadioButton"/>
</Form>
</Application>
这样的的设计使得接口更清晰,更具有可维护性和可读性!
<Application name="WordPad.exe">
<Form refName="MainForm" class=" WordPadClass">
<Control refName="Formatting" id="59396" controlType="ToolBar"/>
<Control refName="Standard" id="59392" controlType="ToolBar"/>
<Control refName="RichEdit" id="59648" controlType="Document"/>
<Control refName="MainMenu" id="MenuBar" controlType="MenuBar" />
<Control refName="FontComboBox" id="165" controlType="ComboBox"/>
<Control refName="FontDropDownButton" id="DropDown" controlType ="Button"/>
<Control refName="FontListBox" id="ListBox" controlType="List"/>
</Form>
<Form refName="Options" class="#32770">
<Control refName="OK" id="1" controlType="Button"/>
<Control refName="NoWarp" id="1027" controlType="RadioButton"/>
</Form>
</Application>
将想法付诸于实践,借此来影响他人是一个人存在的真正价值