GAT使用指南(七)

   基于WebDriver的web自动化

GAT框架的功能分为2个部分,一部分就是文档之前的章节一直在说明的的接口自动化用例的开发。另外一部分就是之前有提到过的基于WebDriver的Web UI自动化用例开发。从本节开始我将会来说明怎么用GAT来开发Web UI自动化用例。

4.1  Web UI用例的开发架构

     WebUI用例的开发结构和接口自动化用例的开发架构基本一致。具体接口请看下图。

developstu

l  与接口用例的共同点:如果大家还记得我们接口用例的开架构的话,可以看出我们的接口用例的所有代码,数据文件都是放在InterfaceAutomation这个文件夹下的。而我们的Web自动化的所有代码,数据文件是放在UIAutomation这个文件夹下的。同时,接口用例和UI自动化用例共同使用Libs文件夹作为第三方公共jar包的存放位置。请注意Libs这个文件夹是公用的,所以需要保持这样的目录结构不变。另外UI用例的开发目录中的文件夹的作用基本和接口用例开发目录中的文件夹作用是一致的。通过文件夹名称相信大家能够明白。当然目录的名字都是可以变化的,具体怎么来设置我会在以后的文章中统一作出说明。

 

l  与接口用例的不同点:UI自动化用例开发目录下的在DataFiles文件夹中只有Xmls这一个文件夹,接口用例的开发目录中除了Xmls这个文件夹之外,还有Excels这个文件夹。大家看到这不要以为是漏掉了Excel文件夹,是我们的UI自动化用例开发架构中确实没有也不需要有Excel文件夹。

4.2 开始写第一个Web UI自动化用例

  1  数据文件

      在写之前先来看看Web UI自动化用到的几个数据文件。

l   Paramters.xml,此文件和我们写接口测试用例的时候的用途是一致的,而且文件结构,属性  都是一致的,也就是说是通用。在此不多说。

l   TestCase.xml 此文件也和接口用例中用到的文件一致,文件结构属性都通用,只不过多出来了一个属性请看下图。

UITestCase

l     如上图红框中所示,Web UI 自动化中用的.TestCase.xml文件与接口中TestCase.xml文件唯一的不同是多了<UIElementsFilePaht>元素,这个元素用来表示这个文件中用到的页面元素存放的位置。大家应该知道WebUI自动化由于需要操作页面元素,因此需要再多一个文件来存放这些页面元素属性。这就是关于WebUI自动化中用到的TestCase.xml文件。和接口自动化一样,WebUI的自动化的TestCase.xml文件也必须以TestCase.xml结尾,否则不能够通过GatRunner生成单元测试用例。

l   UIElements.xml:这个文件时WebUI自动化专有的文件。下面我将通过一个示例文件来一一说明这个文件的结构,以及属性。

下面我一步一步来给大家介绍文件的结构以及属性

UIElements

²  <AllUIElements>:此元素每一个UIElements.xml文件仅有一个,是所有元素的Root元素。

²  <UIElement>: 此元素每一个文件可有多个,此元素用来存放要操作的页面元素的识别信息。一个<UIElement>元素仅代表一个要操作的页面元素信息。下面继续介绍此元素的属性。

ü   NodeID:用来表示此元素在文件中的位置,仅仅用来在UIElements.xml文件中查找<UIElement>这个元素使用,并不表示页面元素在网页中的ID.

ü   ControlType:要操作的这个元素的类型,这个可能比较不太容易理解。在GAT框架里对最基本的页面元素都做了分类,有TextBox,CheckBox,Button等等。每一种类型都对应了一个类。这个ControlType的值也就是一个类名称。这个值可以是我们框架里定义的最基本的类型,也可以是你自己定义的一个类。最基本类型的值可以自行查看API文档中com.gateside.autotesting.Gat.uia.webautomation.webcontrols 这个 package中的类。所有基本类型都在这个类中。

ü   WindowType:这个属性表示要操作的元素是在主窗口还是子窗口上,因为有可能在自动化过程中打开新的窗口,新打开的窗口称为子窗口。

可用值:MainBrowser,ChildBrowser.

不过在实际使用过程中这个属性很少用,我们提供了其他更好的方法做到这一点,因此建议这  个属性就默认保持“MainBrowser”代表主窗口即可。如果此属性选择了ChildBrowser,需要配合WindowName属性使用。

ü   WindowName:当WindowType选择了ChildBrowser的时候需要填写此属性。此属性代表了浏览器窗口的Title或者ID。

ü   FrameType:表示要操作的元素是否是在Frame或者IFrame中。

可用值:DefaultPage,FramePage. 如果要操作的元素不再任何frame中使用DefaultPage即可。如果元素在frame中使用FramePage。如果此属性使用了FramePage,就必须配合后面的IFrameName,IFrameIndex使用。

ü   IFrameName: 是值IFrame的id,name等属性,在此只需要填写能唯一确定iframe的值即可或者name或者ID.如果要操作的元素在嵌套的iframe中。只需要在此按照iframe嵌套的顺序添加iframe的id或者name,用逗号分隔iframe唯一标示信息即可。在此填写了iframe信息,在操作元素过程中就完全不需要再操心元素在哪个iframe中了。

ü   IFrameIndex:有时候有些iframe没有id,name等属性只能通过index来获取iframe.

ü   ID:页面元素的ID

ü   Name:页面元素Name

ü   Xpath:页面元素的xpath

ü   CssSelector:Css样式选择器,可以使用Selenium IDE获得

ü   InnerText:Text属性

ü   LinkText:仅仅针对<a></a>超链接元素

ü   TagName:通过TagName获取元素,返回第一个值

ü   ClassName:通过ClassName定位元素,返回第一个值

ü   PropertyName,PropertyValue:其他元素属性

需要说明的是,以上用于定位元素的属性,仅填写一个能够定位元素的值即可,其余均可留空,不需要都写。

 

2 代码文件

 

1)         用例代码:用例代码的表现形式是基于Testng的单元测试代码,一个TestMethod代表了一个用例。当然了这个用例代码是不需要你自己去写的,和接口用例一样,我们可以通过GatRunner根据TestCase.xml生成。后面我们再介绍使用GatRunner生成WebUI自动化用例时应该注意的点。WebUI生成的测试用例工程名字是WUATTestProject。所有的测试用例代码都在这个Project中。

2)         StepMethod代码:使用过GAT的人都知道,我们自己写的代码都是以StepMethod的形式存在的。WebUI 的StepMethod的代码写法与接口的StepMethod的写法一致,概念,使用方式都是一致的。还记得我在前面的文档里写过,如果你会写多接口组合的用例那么你就会写一般的WebUI自动化用例了,说的就是无论概念还是代码的写法都是一致的。StepMethod代码存放在WUATStepGroup工程下。命名规则,什么的请参考接口的要求即可。唯一不同的就是StepMethod方法的参数类型,以及个数不同。具体请看下面一小节

3)      Step代码示例:

下面代码是用来打开百度首页,并输入搜索关键字,然后点击搜索的一个操作模块。我来一句一句的解释一下每一个句话的含义及功能。

 

publicclass GameHomePageSteps

{

@WUATStepMethodDesc

publicvoid search(WebBrowser browser,WebPage webPage,String parameterID) throws Exception

{

WebUIStepParameter parameter=(WebUIStepParameter)ParameterHelper.getWebUIStepParameter(parameterID);

browser.navigateTo(“http://www.baidu.com”,180);

webPage.getWebControll(“Test01”).action(“inputText”).exec(parameter.getValue(“searchkeyword”));

if(parameter.parameters.contains(“click”))

{

webPage.getWebControll(“Test02”).action(“click”).exec();

}

}

 

}

l   L1:很明显是定义一个Steps类的语句,无需多说。

l   L2:StepMethod注解

l   L3:定义StepMethod,参数有3个。WebBrowser代表我们要操作的浏览器窗口,WebPage表示我们要操作的页面,parameterID和接口用例中StepMethod的parameterID的含义是一致的。表示这个StepMethod中用到的数据的存放地址。

l   L4:通过parameterID获取到我们要使用到的数据

l   L5:打开百度首页,browser中有很多方法,大家可以参考API接口文档中的描述使用。

l   L6:通过webPage获取“Test01”这个元素,然后告诉框架要执行方法”inputText”,最后传递要输入的参数值。从页面上来看做的操作就是找到百度首页的搜索输入框,输入搜索关键字。

l   L7:判断参数数据中是否包含”click”,如果包含就点击搜索,不包含就不点击搜索按钮。做到数据驱动。

l   以上就是我们最简单的一个代码的例子。

4)      打包StepMethod代码:

相信大家还记得我们接口用例写完StepMethod代码后,需要重新运行build.xml文件打包对吧,对于UI的代码来说这个步骤也是必须的。同时对于build.xml的配置和修改,请参考接口用例即可。

5)      组合用例:

写完StepMethod后,就需要我们通过StepMethod来组合用例。我们组合用例也是在TestCase.xml文件中。和接口用例的写法,概念一致。除了需要配置UIElementsFilePath这个属性之外。

6)      生成测试用例代码:

运行GatRunner代码,即可生成用例代码。在运行之前要修改2个配置文件。

l   gatCreator.properties,这个文件在接口用例的时候也会修改。在UI自动化中要修改的地方,以及规则概念都与接口是一致的。修改注意细节请参考接口。

l   start.bat:这个文件也要和接口用例一样做修改。只不过在UI自动化中修改的地方要多一个。请看下图

l  uistartup.bat

l   如图所以将红圈中的1改为0保存即可。

l   修改完两个文件后,就可以双击start.bat生成用例了。

7)      执行用例

l   执行UI自动化用例和执行接口用例的方式概念,要修改的配置文件等都一样。请参考接口用例执行应该注意的点即可。

8)结语:

到这里,怎么用GAT做UI自动化的帮助文档就写完了。可能还有好多细节没有写,有问题,大家可以加群51302519 ,找我解答,或者让我补充文档都可以。WEB UI自动化的的难度和复杂度相比接口来说要高很多。可能在你使用GAT做Web UI自动化的过程中会遇到很多问题,有可能是GAT的问题,也有可能是Selenium的问题,都可以在群里问我。

咦?还没有评论,抢沙发!

发表评论