使用XML维护Selenium自动化测试脚本

发表于:2013-6-07 10:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:祝尚元    来源:51Testing软件测试网采编

  清单 5. 使用 DOM4J 解析 XML 脚本文件

Document document = null;
 try {
 System.out.println("测试用例 XML 文件位置 ::" + ucXMLFile);
 document = new SAXReader().read(new File(ucXMLFile));
 } catch (DocumentException e) {
   e.printStackTrace();
   }
 Element suiteElm = document.getRootElement();
 // settings element
 Element settings = suiteElm.element("SETTINGS");
 if (settings != null) {
    browser = settings.attributeValue("browser");
    seleniumServer = settings.attributeValue("seleniumServer");
    seleniumPort = settings.attributeValue("seleniumPort");
    application_url = settings.attributeValue("application_url");
    }

  2、读取 STEP 测试步骤信息

  获取用例级别的延时设置,在每一个测试步骤执行之前,暂停 timeout 指定的秒数。通过指定延时,可以让程序执行的慢一些,符合用户真实操作,也方便演示。获取的测试步骤信息保存在列表实例 List<Element> stepNodes。

  清单 6. 获取测试步骤信息

// TEST element
Element testElm = suiteElm.element("TEST");
System.out.println("测试用例名称为 ::" + testElm.attributeValue("name"));
if (testElm.attributeValue("timeout") != null) {
// 用例级别的 timeout 设置 , 覆盖了默认设置!
timeout = new Integer(testElm.attributeValue("timeout")).intValue();
System.out.println("延时设置,timeout=" + testElm.attributeValue("timeout")+"秒");
}
stepNodes = testElm.element("STEPS").elements();
}

  3、创建 Selenium 实例,启动浏览器,最大化浏览器窗口,打开要访问的网站

  清单 7. 创建初始化 Selenium 实例

selenium = new DefaultSelenium(seleniumServer,
new Integer(seleniumPort).intValue(), browser, application_url);
System.out.println("正在启动 Selenium。。。");
selenium.start();
selenium.windowMaximize();
selenium.open(application_url);

  4、迭代解析 STEP 元素执行各个测试步骤

  创建一个迭代器实例 iterator,使用 while 循环,依次执行各个测试步骤。在执行的时候,打印详细的步骤信息,方便调试。根据 type 属性指定的步骤类型,分别调用不同的 Selenium 接口。作为演示,本文提供的代码例子,仅仅包括鼠标单击、输入框输入和截图功能。通过丰富处理 SETP 步骤元素的代码,可以支持更多的功能。

  清单 8. 迭代依次解析测试步骤

Element elm = null;
// 循环解析测试步骤
Iterator<Element> iterator = null;
iterator = stepNodes.iterator();
while (iterator != null && iterator.hasNext()) {// while 循环开始
elm = iterator.next();
System.out.println("------------------------------>");
System.out.println("step index=" + elm.attributeValue("index"));
System.out.println("step name=" + elm.attributeValue("name"));
System.out.println("step type=" + elm.attributeValue("type"));
String type = elm.attributeValue("type");
if (type == null) {
SeleneseTestBase.fail("必须定义 type 属性,请检查 XML 测试用例。");
}
if (type.equals("Type.CLICK")) {
// 处理 Click 单击操作
pause(timeout*1000);
try {
String xpValue = elm.element("XPATH").getText();
selenium.click(xpValue);

} catch (Exception e) {
SeleneseTestBase.fail(e.getMessage()+ "\n 步骤执行失败,测试执行被中止 , \
测试元素为 :\n" + elm.asXML());
}
} else if (type.equals("Type.INPUT")) {
// 处理 Input 在输入框执行输入操作
pause(timeout*1000);
try {
String inValue = elm.element("VALUE").getText();selenium.type(\
elm.element("XPATH").getText(), inValue);
} catch (Exception e) {
SeleneseTestBase.fail(e.getMessage()
+ "\n 步骤执行失败,测试执行被中止 , 测试元素为 :\n" + elm.asXML());
}
}
else if(type.equals("Type.CaptureScreenshot")){
pause(timeout*1000);
String fileName = elm.element("VALUE").getText();
captureScreenshot(fileName);
}
}// 循环解析测试步骤;while 循环结束

  完整的框架项目代码请参考附件进行下载。对这个单元测试类的运行和前文描述的是一致的,不再赘述。当然,现在的框架支持的功能是非常简单的 (仅仅支持单击、表单输入和截图功能),框架开发人员可以添加更多的功能特性,然后就可以把该自动化测试框架交付给业务测试人员,他们就再不会为编写测试代码发愁了。

  Selenium 框架的更多特性开发

  通过上面的演示,我们了解了如何开发一套不需要掌握编码知识就能编写自动化测试用例的测试框架。因为篇幅的原因,本框架支持的特性比较少,框架的功能非常简单,只支持鼠标单击操作、数据输入操作和截图功能,远远不能满足自动化测试的需求。本文的最主要目的在于让读者理解这种自动化框架的理念。读者可以根据自己项目组的实际情况进行自定义开发更多的功能特性。

  结束语

  通过上面的介绍,我们了解到了如何向传统的功能测试用例里面添加额外的控件信息,从而形成能被自动化测试工具识别的自动化测试用例;以及如何使用 XLST 转换 XML 格式的测试用例文件成 HTML 格式,增加了用例的可读性;并通过详细的例子探讨了如何定制属于自己的基于 Selenium 二次开发的自动化测试框架。最后再次总结一下该框架的让人心动之处,整理一下思路 , 规划属于您自己的自动化测试框架吧。

  ● 业务测试人员不需要编程知识,熟悉业务和浏览器,即可开发自动化测试脚本业务测试

  ● 人员不需要编程知识,熟悉业务和浏览器,即可开发自动化测试脚本

  ● 自动化测试用例和传统的功能测试用例看起来很像,阅读方便,利于评审

  ● 扩展性比较强大,可以开发出更多的功能特性。XML 测试用例脚本通用性强,可以适用不同的测试工具

44/4<1234
《2023软件测试行业现状调查报告》独家发布~

精彩评论

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号