您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
利用Selenium自动化web测试
作者:网络转载 发布时间:[ 2016/6/15 16:19:26 ] 推荐标签:Selenium 功能测试 自动化测试

  简介
  Selenium 是一个健壮的工具集合,跨很多平台支持针对基于 web 的应用程序的测试自动化的敏捷开发。它是一个开源的、轻量级的自动化工具,很容易集成到各种项目中,支持多种编程语言,比如 .NET、Perl、Python、Ruby 和 Java? 编程语言。
  利用 Selenium 测试 Ajax 应用程序
  Asynchronous JavaScript and XML (Ajax) 是一种用于创建交互式 web 应用程序的 web 开发技术。Ajax 应用程序的一个特征是,不会导致一次重新加载整个页面。相反,浏览器将具有一个对服务器的异步调用以获得数据,并且只刷新当前页面的特定部分。要提高 web 页面的交互性、响应速度和可用性,测试 Ajax 应用程序的过程需要一些改变。
  我们首先刷新 web 页面,然后是等待,直到异步调用完成。完成之后,可以继续进行验证。此时,出现适当等待时间的问题。
  一种选择是在测试应用程序中简单地暂停一段固定的时间,这在大多数情况下都是可行的。在有些情况下,比如说网络吞吐量很慢时,Ajax 调用在暂停一段特定的时间之后没有完成,会导致测试用例失败。另一方面,如果暂停时间太长,会使得测试慢得不可接受。
  Selenium 提供了更为高效的处理等待的方式。一种可能做法是,使用类 com.thoughtworks.selenium.Wait 来等待一个元素或文本在页面上出现或消失。可以在 until() 函数中定义等待的退出条件,或者扩展 Wait 类来实现等待退出。清单 1 是使用 Wait 类的样例代码。它将在条件满足时停止等待,或者在超出大等待时间时返回一个超时异常。
  清单 1. 等待元素或文本出现
  Wait wait = new Wait() {
  public boolean until() {
  return selenium.isElementPresent(locator);
  // or selenium.isTextPresent(pattern);
  }
  };
  wait.wait("", timeoutInMilliseconds);
  另一种选择是使用 Selenium 中的 waitForCondition 函数,一个 JavaScript 代码片段将被作为参数传递给该函数。一旦 Selenium 检测到条件返回为真,它将停止等待。您可以等待一些元素或文本出现或者不出现。JavaScript 可以运行在由 Selenium.browser.getCurrentWindow() 函数弹出的应用程序窗口中。清单 2 是检查窗口状态的样例代码。它只工作在 Firefox 中。
  清单 2. 等待窗口绪的状态
  String script = "var my_window = selenium.browserbot.getCurrentWindow();"
  script += "var bool;";
  script += "var readyState = (my_window.document.readyState);";
  script += "if (readyState == 'complete'){";
  script += "bool = 'true';";
  script += "}";
  script += "bool;";
  selenium.waitForCondition(script, timeoutInMilliseconds);
  如何支持 dojo 应用程序
  Dojo 是一个常用的 JavaScript 工具包,用于构造动态 web 界面。使用 Selenium 测试 Dojo 应用程序时的一个关键点是认识 Dojo 小部件和记录它们的操作。作者定义的 Dojo 小部件处于抽象级别。页面运行时,会将 Dojo 小部件转换成基本的 HTML 代码。存在很多由 Dojo 自动生成的 HTML 代码,因此,Dojo 小部件的认识可能与传统 HTML 小部件有些不同。
  Dojo 小部件上执行的操作(包括文本字段、按钮复选框和单选按钮)可能与 HTML 小部件相同。但是,Dojo 在组合框上提供的日期选择器和其他额外的小部件可能需要特定的处理。
  图 1. Dojo 组合框

  展示带几个选项的组合框的屏幕快照
  使用 Selenium IDE 来记录图 1 中提供的组合框上选中的操作。单击向下箭头,会出现一个下拉列表。选中第三项 Stack(SWG)。记录的脚本提供在图 2 中。
  图 2. Selenium IDE 记录的脚本

  展示 Selenium 所记录信息(比如鼠标单击)的屏幕快照
  有时,只会由 IDE 生成第二行脚本。在这种情况下,添加单击箭头按钮的操作。对于上面的脚本,如果第一行被重新播放,那么它应该生成下拉列表。但是它不执行任何操作。对于多个 Dojo 小部件,单击并不真正执行单击操作。将 click(locator) 更改为 clickAt(locator, coordString) 或者 MouseDown(locator) 和 MouseUp(locator)。
  对于下拉列表,等待时间应该相加。像图 2 中展示的脚本一样,选中项的单击操作将会刚好在单击向下箭头按钮之后执行。它可能会因为下拉列表没有出现而失败。简单地添加一个 pause 命令,或者使用 waitFor 命令等待菜单项元素出现,并继续执行下一个命令。
  修改后的将会自动化 Dojo 组合框上的选择的脚本展示在图 3 中。
  图 3. 修改后的在 Dojo 组合框中进行选择的 IDE 脚本

  屏幕快照展示 clickAt、waitForElement 和 ClickAt 命令已修改
  RC 代码展示在清单 3 中。
  清单 3. 自动化 Dojo 组合框中选择操作的 RC 代码
  selenium.clickAt("//div[@id='widget_offeringType']/div/div",””);
  selenium.waitForCondition("selenium.isElementPresent("offeringType_popup2")", "2000");
  selenium.clickAt("offeringType_popup2",””);
  图 4. 日期选择器

  展示日期选择器的常规月历视图的屏幕快照
  对于图 4 中的日期选择器例子,执行的操作可能不会被 IDE 记录。编写如下面清单 4 所示的 RC 代码。

上一页12345下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd