`
liuhaipeng
  • 浏览: 6178 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Selenium Ajax

阅读更多

  在典型的在线商店中,需要用户输入或选择众多步骤后才可以完成整个购物流程。作为web应用的开发者,你如何保证你程序的质量和正确性呢?如果能有办法测试你功能的正确性,那问题就迎刃而解了,但如何做到呢?
    Selenium 是一个由ThoughtWorks做的专门为web应用所做的非常有效的功能测试工具。Selenium 的 tests 直接在浏览器里跑,就像用户真的在操作一样。Selenium 可运行 Windows, Linux, 和 Macintosh 的各种浏览器, 如 Internet Explorer, Mozilla 和 Firefox。
    看看Selenium 的  online demo 。点击右上角的"All"按钮来启动运行test cases, 如无意其外,你将看到所有都是绿行。注意action的绿色是会比assertions浅的,这是因为他们测试的所有东西都只是verify或assert 命令。如果有一个assertion 失败了,则那行命令会变为红色,并且Selenium 会停止运行。如果verify 命令失败了,那行命令也会变为红色,但是不会让测试停下来。

    在 Selenium 中的Test suites 和 cases 实际上是由 HTML 写成的, 它们只是很简单的 HTML <table>s。 test suite 中没行都只是关联了一个test case, 例如:
<tr><td><a href="MyTest.html" >MyTest</a></td></tr>
    test-case实际上是由 "Selenese" 写成的 HTML 文档,里面包有一个table,3个列,所有的命令最多只有两个参数,所以足够位置摆放。一个典型的test case像这样:

    当你开始运行测试 (例如 按 "All"按钮), Selenium 的 TestRunner 会自动解释 HTML 格式的 test-case, 并运行你的web应用,并在页面下方的框架中显示运行的情形。
Selenium 允许你通过在浏览器里模拟用户的行为来进行测试。这当然不代表它可以代替unit-testing,只是我们通常会用它来进行web应用的功能测试。它也可以被加入持续继承测试(continuous-integration)中,作为常规的自动回归测试(regression testing)。如果想更深入了解Selenium, 请参看在线文档 "Selenium: Usage".

开始测试 Ajax
    在你的web应用功能是用Javascrīpt实现时,Selenium 就显得极为有用了。
Ajax, 是Asynchronous Javascrīpt and XML 的简称,是web应用中的一种web 交互技术。它可以实现在页面不需要刷新的情况下,在后台与服务器交互少量数据,并即时改变页面内容。这意味着网页看起来更实时,更有动态和更实用。

Ajax 中指示正在"读取数据"的标签

    刚才那句话是对Ajax的技术定义,对于我们大多数人来说,Ajax意味着页面向GMail 或 Flickr 那样。当你点一个连接时,它不会产生页面刷新,而是页面会和服务器交互后返回来再更改一部分页面。在点击连接和看到结果之间延迟的这段时间,让测试看起来那么的棘手。
让我们来假设我们的页面包含了一个text field 和一个 button。text field 的初始值是oldValue。 如果你点击button, Ajax就会启动,并把text field的值改为 "newValue", 而没有刷新任何页面。那我们怎么去测试它呢? 你会很自然的去打开页面, 点击button, 然后检查text field。但是你在Selenium中的这个test case失败了!

    测试失败的原因也许并不明显。这个意外的发生是因为Ajax的异步性,它并不会马上从服务器上得到结果。所以当你按下button时,Selenium 就开始马上检查是否有改变值。Selenium 并不知道需要去等待结果。那我们如何去让这个测试在Ajax下生效呢?
    我们如何去让Selenium 等待返回的结果呢? 有些人认为解决这个问题的办法是用clickAndWait命令来代替click命令;但是在使用以"AndWait"为后序的命令时,Selenium 会等待页面刷新。但是明显的,页面不会刷新,这样就使得Selenium 永远在等待了。明显这个方法行不通。
另外一个方法是在clickassertValue之间加入暂停时间。让它暂停5秒,让服务器有足够的时间返回相应。这种方法在大多数时候是可行的,但是如果服务器相应时间大于5秒,如网速很慢,测试机重启等的时候,就会失败了。你或许会加大等待时间来保证更正确,但是这样明显会使得你的测试越来越慢。所以明显的这个办法并没有按需而慢下拉,所以这也不是最佳的解决办法。
    幸运的是,Selenium 现在已经提供了这种我们非常需要的技术支持。当field 的值在单前页面改变时,你能用waitForValue命令去让 Selenium 等待到这个期望值出现为止。
    所以为了让刚才的失败的测试通过,你需要把它其中的assertValue命令改变如下:

    当执行这个命令的时候, Selenium 会暂停执行当前的test case 和等待所期待的值。当新的值 "newValue" 出现在 text field 时, 测试再次开始。但你需要注意的是,如果你写错期望值了, 那 Selenium 将会等待这个值30分钟。
    就如你想到的那样,Selenium 已经提供了很多测试Ajax 效果的命令。例如,如果你想等待某些文本会在页面上出现,那你可用waitForText命令;如果你想检查当前页面的Title是否有改变,则用waitForTitle;  如果你想检查某个 HTML 元素是否有在页面中被移除,应用waitForElementNotPresent命令。 实际上,对于每个Selenium Accessor, 都会有相应的waitForXxxxwaitForNotXxxx命令。当你用verifyXxxxorassertXxxx去检查某些东西时,总可以有waitForXxxx去测试异步效果。
如果预先确定了waitForXxxxwaitForNotXxxx命令但又达不到预期,那会怎样呢? 对于这种情况,我们有waitForCondition命令去指定一个Javascrīpt 的真假表达式(Boolean expression), 然 Selenium 去等待表达式的值为true为止。waitForCondition 命令的格式是

 

waitForCondition scrīpt timeout (in ms)

这样在测试复杂的 Ajax 效果时就更为便捷了。

    实际上如果你深入研究 Selenium 的 source code 的话, 你会发现所有前序为waitForXxxxwaitForNotXxxx的命令都是继承了waitForCondition 的。 Grig Gheorghiu 写了一篇关于这方面的blog: Ajax testing with Selenium using waitForCondition. 当他写这篇文章时,waitForCondition仅仅是用户自己扩展Selenium, 现在已经成为Selenium 核心代码的一部分了。

    selenium.waitForCondition("var x = selenium.browserbot.findElementOrNull('" + tableId + "'); x != null ;", Global.TimeOut);

总结
    在这篇简短的文章中, 我们介绍了Selenium,一个web应用测试工具。同样地,我们也讨论了如何去用waitForXxxx命令来测试 Ajax 应用,也演示了如何用 Selenium 去测试一些Ajax 异步效果。
    如果你想知道更多有关于waitForXxxx命令, Selenium 的开发者提供了一些简单的测试例子 演示了如何测试 Ajax, 如编辑替换,自动填充和拖拉效果等。这些例子是基于scrīpt.aculo.us, 来做的, 它是大家都非常熟悉的 Ajax library- prototype.js的子项目。
转载自:http://www.51testing.com/?uid-29925-action-viewspace-itemid-70397

 

分享到:
评论

相关推荐

    C#使用Selenium+PhantomJS抓取数据

    在进行网络爬虫开发时,有时我们需要处理那些依赖JavaScript动态渲染的网页,这时C#结合Selenium与PhantomJS就成为一个有效的解决方案。本文将详细介绍如何在C#环境中利用Selenium WebDriver和PhantomJS来抓取此类...

    selenium---详细讲解

    Selenium不仅可以用于传统的静态页面测试,对于Ajax(Asynchronous JavaScript and XML)驱动的动态Web应用同样适用,这在现代Web开发中尤为重要。 #### Ajax与Selenium Ajax技术的普及使得Web应用变得更加交互性和...

    selenium-06-ajax的介绍.ev4.rar

    2. **Selenium与Ajax交互**:由于Ajax请求通常在后台进行,Selenium需要特殊的方法来等待这些请求完成。这可能包括使用`WebDriverWait`和特定的等待条件,确保页面状态更新后再继续执行下一步操作。 3. **检测Ajax...

    如何用selenium封装post参数提交示例

    封装POST请求的关键在于模拟表单提交或者使用JavaScript执行AJAX请求。以下是一个简单的例子,展示如何使用Selenium来封装POST参数: ```python from selenium import webdriver from selenium.webdriver.common....

    selenium-08-ajax的使用法术post请求.ev4.rar

    在“selenium-08-ajax的使用法术post请求.ev4.rar”这个资源中,我们聚焦于Selenium如何处理Ajax异步请求,特别是POST请求的场景。在Web应用中,POST请求通常用于向服务器发送数据,比如提交表单或者创建新资源。...

    Selenium_IDE_官方文档翻译.pdf

    * AJAX 应用中的 WaitFor 命令:Selenium IDE 提供了 WaitFor 命令,用于在 AJAX 应用中等待元素的出现。 三、Selenium IDE 的使用 Selenium IDE 的使用非常简单,只需要点击火狐浏览器的工具菜单,找到 Selenium ...

    java selenium智能等待页面加载完成示例代码

    或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操作 selenium 中提供了非常简单,智能的方法,来判断元素是否存在.  阅读目录 实例要求 隐式等待 显式等待 实例要求 实例:set_timeout.html 下面...

    selenium-07-ajax的使用发送get请求.ev4.rar

    本教程重点讲解如何在Selenium中使用Ajax来发送GET请求。 首先,理解Ajax的工作原理至关重要。Ajax的核心是XMLHttpRequest对象,它允许JavaScript在后台与服务器进行异步通信。在发送GET请求时,我们创建一个...

    selenium-3.0.0b2.tar.gz

    Selenium 还支持模拟用户交互、处理弹出窗口、执行 JavaScript 代码、处理 AJAX 加载的页面等复杂操作。此外,配合测试框架如 pytest 或 unittest,可以编写自动化测试用例,实现对网站功能的全面测试。 总之,...

    selenium webdirver电子书+代码

    4. **进阶篇**:随着对Selenium理解的深入,书中可能会讲解更复杂的操作,如处理弹出框、模拟键盘和鼠标事件、处理Ajax异步加载页面、实现页面对象模式等,提升测试脚本的可维护性。 5. **实战篇**:项目代码部分...

    Selenium使用文档压缩包

    读者可以从中学习到如何处理复杂场景,比如模拟用户输入,处理JavaScript弹出框,执行AJAX请求后的测试,或者如何利用Selenium Grid进行分布式测试,以提高测试效率。这本书可能还包括了一些高级话题,如测试设计...

    Selenium Documentation

    ### Selenium 文档知识点详解 #### 一、绪论与介绍 **Selenium 是什么?** Selenium 是一个用于 Web 应用程序测试的工具。它支持多种编程语言(如 Java、C#、Python 等),并且可以在各种浏览器上运行(如 Chrome...

    Selenium各种案例

    以上只是Selenium部分功能的概述,实际应用中还有更多高级技巧和场景,如模拟鼠标和键盘动作、处理iframe、处理Ajax异步请求等。" Selenium python之学习笔记-示例html文件 "可能包含了这些概念的实际代码示例,通过...

    Selenium自动化测试培训

    ### Selenium测试AJAX - **等待技术**:针对异步加载的内容,学习如何设置合适的等待策略。 - **AJAX控件识别**:掌握识别和测试AJAX组件的方法,如利用JavaScript进行交互。 ### Selenium脚本设计 - **封装调用*...

    selenium介绍.html

    3. 在处理JavaScript和Ajax异步请求时可能需要额外的策略。 4. 无法测试浏览器特有的功能,如浏览器插件。 **使用Selenium的基本步骤** 1. **安装依赖**:根据选择的编程语言和浏览器,下载并安装相应的驱动程序。...

    Selenium的API教程

    "waitfor"命令用于等待特定条件满足,通常用于Ajax应用的测试,如果条件未满足,测试会持续等待直到超时。 4. **元素定位器(ElementLocators)**: 这是Selenium定位HTML元素的关键技术。元素定位器可以基于ID、...

    selenium初学者相关文档

    以上只是Selenium的部分核心概念和使用技巧,实际应用中还需要了解更多的高级特性,如处理Ajax异步请求、模拟文件上传、使用Selenium与TestNG或JUnit集成进行更复杂的测试管理等。通过深入学习和实践,你将能够熟练...

    Selenium浏览器驱动最新版 - 2018-05-18

    Selenium 是一个强大的自动化测试工具,它允许程序员模拟用户与网页进行交互,广泛应用于Web应用程序的测试。在2018年5月18日发布的这个压缩包中,包含了Selenium支持的三个主流浏览器——Firefox、Google Chrome和...

    selenium-java环境包

    此外,为了确保测试的稳定性和可靠性,还需要了解并掌握如何处理异步加载的内容、处理JavaScript事件、执行AJAX请求,以及如何进行断言以验证测试结果。同时,对于大型项目,还需要了解如何组织测试结构,如使用Page...

Global site tag (gtag.js) - Google Analytics