第24章selenium(待整理)_第1页
第24章selenium(待整理)_第2页
免费预览已结束,剩余26页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 24 章 selenium (待整理)第 24 章 selenium (待整理) 24.1. selenium 功能测试 24.1.1.概述 Selenium 是非常非常有用的, 对 JavaScript 支持 良好的 Web层功能测试,集成测试工具。Selenium 分为 Core 与 RC(Remote Controll) 两个部分,其中Core 是基础的,直接在 HTML Table 里编写测试代码的模块, 而Remote Controll 则支持用 Java 等语言编写测试用例,并 自动调用FireFox1.5 来运行。具体的语法见/sele

2、nium-core/usage.html24.1.2. BetterPracticeNever use Selenium FIT modeSelenium 分为两种运行模式, Driven Mode( 现在叫 SeleniumRemote Control)和 FIT Mode(现在叫 Selenium Core)。FIT Mode 顾名思义, 就是类似 FIT Testing Framework 那种使 用方式, 主要用于 QA 等非技术人员编写 Web 应用的功能测 试FITMode 的 Selenium 测试使用 HTML 来组织测试用例。例如我要测试一个 web 应用的登陆功能。 我可能

3、写出这样的 HTML 表格。1< table >2< tr >3< td > open </ td >< td > http:/localhost:8080/login </ td>< td ></ td ></ tr >< tr >< td > type </ td &

4、;gt;< td > id=username </ td >< td > someuser </ td ></ tr >< tr >< td > type </ td >< td > id=password </ td >< td > password </ td &g

5、t;</ tr >< tr >< td > click </ td >< td > id=login_button </ td >< td ></ td ></ tr >< tr >< td > assertTextPresent </ td ><

6、td > Welcome to xxxx </ td >56789101112131415161718192021222324< td ></ td >26 </ tr >27 </ table >不同于 FIT , Selenium 内置了一系列的命令,如上例中的 open, type,click 以及 assertTextPresen,t 因此 QA 可以完全抛开 DEV 独立地编写测试 (FIT 需要 DEV 提供 Behavior F

7、ixture) 。因此 FIT Mode是相当容易使用的,哪怕不会使用 HTML 的 QA, 也可以使用FrontPage 画出三列表格,依次填入数据。 然而对于大多数 team 而言尤其是敏捷 team, FIT Mode 平易的外表下是令人恐惧的泥沼。大多数团队往往选择使用 Selenium 作为功能测试和集成测试工具而不仅仅是 QA 测试 工具,在不同的迭代间遇到功能流程或 UI 变化时,必须要 重构 Selenium 测试,或者说, Functional TestMigration 。令 人遗憾的是, HTML based 的 Selenium FIT Testing的重构竟 然令人难

8、以置信的困难。我们可以使用 include 等Selenium FIT 扩展,使得它可以重用详细的功能( Log in , Log out诸如此类)。即便如此,在一个真实的项目中, Selenium Test 的数量往往在 200-500 之间 (我目前所处的项目在改用 Driven Mode 前已达 350+) ,对于这么大基数的 Selenium 测试,手 工重构几乎是不可想象的, 而目前尚没有 HTML 代码重构工 具。即便存在泛泛意义上的 HTML 重构工具, 对于 Selenium25测试重构的有效性尚待商榷。而使用 Driven Mode 上述代码 可以写为 :1public vo

9、idtestShouldShowAWeclomeMessageAfterUserLoggedIn() 2selenium.open( http:/localhost:8080/login );3selenium.type( id=username , someuser );4selenium.type( id=password , password );5selenium.click( id=login_button );6assertTrue(selenium.isTextPresent( Welcome to xxxx );7 很自然,一个训练有素的程序员会重构出如下代码 :1public

10、 void login(String username, String password)2selenium.open( http:/localhost:8080/login );3selenium.type( id=username ,username);4selenium.type( id=password , password);5selenium.click( id=login_button );6 7public voidtestShouldShowAWeclomeMessageAfterUserLoggedIn() 9login( someuser , password );10a

11、ssertTrue(selenium.isTextPresent( Welcome to xxxx );11 之后无论是 pull up 到公共基类还是 extact 到 Utils class 都是 很容易的事情。由于 Java 在代码重构上便利,Java Selenium RemoteControl 成为使用 Selenium 的最佳方式。 在这一点上, 纵使 Ruby语法上比 Java 简单灵活得多,它仍不是编写 Selenium 测试的最佳载体 (当然一个经过精心设计的rubyselenium dsl wrapper 还是具有非凡的价值的,这个我们后面 会涉及到 )。 24.1.3.

12、Using the name user, system, page instead ofselenium 观察上面提到的代码, 其中使用 selenium 来操纵 web 应用的行为,这在 Remote Control 里是常见的做法,但是仍 然不够好,我们可以做一些小的变化以得到更好的测试 :1protected void setup() 2selenium =/ intialize selenium instance3user = selenium;4currentPage = selenium;5 public void login(String username, String pas

13、sword)8user.open( http:/localhost:8080/login );9user.type( id=username ,username);10user.type( id=password , password);11user.click( id=login_button );12 1314public voidtestShouldShowAWeclomeMessageAfterUserLoggedIn() 15login( some guy , password );16assertTrue(currentPage.isTextPresent( Welcome tox

14、xxx );17 基本上这只不过是 另一种写法 而已,但是它更好的表达了 用户的行为 ,如 login 代码所示。以及 系统的正确相应 , 即currentPage.isTextPresent()。这种是典型的对编译器无意义 对人有意义的代码,也就是普遍意义上好的代码。 24.1.4.Creating a DSL base on your test codes 懂得 HTML 的 QA 可以 在没有 DEV 的帮助下使用 Selenium FIT mode ,然而却不能 在没有DEV 的帮助下使用 Driven Mode 。于是最自然也是最 fashion 的做法,就是在已有的 test co

15、des 之上提供 Testing DSL 或者 ScriptingLanguage ,让 FIT mode 变得更加 FIT 。这方面 内容是一个更大的主题, 以后再详细展开吧。 24.1.5. Hacking Selenium Object tosupport FIT commandSelenium FIT mode 和 RC mode 下的命令有些许差异,比如 FIT 中的 assertTextPresent 在 RC 中变成了isTextPresent。同样还有 FIT 中最实用的命令 clickAndWait ,在 RC中变成了 click 和 waitForPageToLoad。在

16、RC 中使用 FIT mode 中的命令也非难 事,找到 com.thoughtworks.selenium.Selenium ,添加方法 : public void doCommand(String commmand, Stringparameters);然后在 com.thoughtworks.selenium.DefaultSelenium 中添加实 现:1public void doCommand(String commmand, String parameters)2String paras = new String , , 3for ( int i =0 ; i <

17、parameters.length&& i < 3 ; i + )4parasi = parametersi;5commandProcessor.doCommand(command, paras);然后试验一下 : selenium.doCommand( clickAndWait );在我们使用纯 RC mode 之前曾经用过一段中间方案,将 rc code 转化为 fit code 来跑(因为 rc 不支持 https), 由于不是真 正的 rc mode,像 isTextPresent 之类的方法都没有办法使用, 只能使用 FIT modeco

18、mmand 。因此如果因为一些特殊的原因 (https, chrome 起不来,hta bug 多等等 ),你没有办法使用 RC mode,但是有希望得到RC 可重构的好处,那么这个tricky的技巧倒是不错的选择。 24.1.6. Using chrome and IE hta lanucherto support https24.1.7. Run test using different browser lanucher totest browser compatibility 这两个都是和 browser lanucher 相关的,Selenium 和 JWebUnit 最大的不同在于它

19、使 用真实的浏览器来跑测试,从而可以更加真实地考察系统在 不同浏览器中的表现。因此使用不同的浏览器lanucher 来运行测试, 可以更好测试应用的浏览器兼容性, 这对于 web 2.0 应用而言是很有帮助的。此外,使用rc 提供的试验性lanucher, chrome 和 hta 可以解决跨 domain 测试和 https 的问 题。不过目前 hta 还是有很多 bug 的,推荐使用 chrome。当 然,最希望的还是澳洲的同事可以早日在 selenium 里提供https 支持。 24.2. Selenium 指南网站: 国内大部分公司还依靠 Q

20、A 组的 MM 看着测试用例 Word 文 档来手工测试。如果钱人有限,又想改变现状,最实在的自 动化测试建议是先编写直接访问数据库的商业层单元测试 用例和 基于 Selenium 的集成测试用例。在徐昊指导下, SpringSide2.0 已经全面应用 Selenium 。 Selenium能被选为最好集成测试、回归测试方案的原因是: Selenium IDE ,一个 FireFox plugin ,能自动记录用户的操作, 生成测试脚本。生成的测试脚本可以用 Selenium Core 手工执行,也能基于Selenium RC 放入 Java,C#,Ruby 的单元测试用例中自动运 行。测试

21、用例调用实际的浏览器 (如 IE、FireFox) 来执行测试。和 有些开源方案自行实现 Web 解释引擎相比, 实际的浏览器能 模拟更多用户交互和 JS 语法,顺便还可以测试各浏览器兼容 性。测试脚本语法非常简单,见后。 24.2.1. 使用 Selenium IDE 生成脚本 Selenium IDE 是一个 Firefox1.5 插件,下载后用 Firefox 将其打开。工具 ->Selenium IDE ,点击红色的 recorder 按钮开始录制, 在网站中乱点时可以即时看到每个动作的脚本。切换 Format :显示 HTML , Java, C#, Ruby 语法的脚

22、本。 option里还可以设定 Java 里 Selenium 变量的名称,如设为 user,使脚本显示为 user.input(name,foo);user.type(addButton) ,阅读比较自 然。 24.2.2. 测试用例与测试脚本 public class UserManagerTestextends TestCaseprivate Selenium user; public void setUp() throws Exception user = new DefaultSelenium( localhost ,SeleniumServer.DEFAULT_PORT, *iex

23、plore ,http:/localhost:8080 );user.start(); protected void tearDown() throws Exception user.stop();public void testUserEdit() user.open( /helloworld );user.click( /acontains(href, user.do?id=0) );user.waitForPageToLoad( 3000 );user.type( , calvin );user.click( save );user.waitForPageToLoad

24、( 3000 );assertTrue(user.isTextPresent( calvin );留意 setUp 中的 *iexplore 参数,设定使用 IE 作为测试浏览 器;如果设为 *firefox ,就会在 PATH 中查找 *firefox.exe 。 注意,Selenium 使用 IE 时的 Proxy 机制比较特殊, 如果你同 时在本机ADSL modem 拨号上网, 要先断网。脚本中按徐昊的指导, 使用 user作为 Selenium 的变量名, 使用例更加易读。Selenium RC 里并没有为 Java 单列一个函数参考手册,需要 阅读公共的 Selenium Refr

25、ences,再使用同名对应的java 函数。所有函数都有一个 locator 参数,将操作付诸某个页面上的对 象。支持 ID , DOM 语法,XPath 语法,CSS selector 语法等, 详见参考手册。如果不会写,最好的老师就是 Selenium IDE 。比如那句点击<a href=user.do?id=0 />修改</a>,就是用 IDE 得 到user.click(/acontains(href, user.do?id=0) 的 XPath 语 句。24.2.3. Ant 的运行脚本我写的 Ant 测试脚本一个重要特 征是

26、使用<parallel> 并行容器节点,一边同时打开tomcat 和 selenium server, 边等待两者打开后执行JUnit测试。如果不使用并行节点,而是用 spawn=yes 属性后台启动tomcat,则屏幕里看不到 tomcat 信息,如果测试意外终止的 话,也不能关闭 tomcat。< parallel >< antcalltarget =tomcat.start />< antcalltarget =selenium.server.start /><

27、sequential >< waitfor maxwait =10 maxwaitunit =minutecheckevery =1 checkeveryunit =second >< http url =http:/localhost:8080/></waitfor >< waitfor maxwait =10 maxwaitunit =minutecheckevery =1 checkeveryunit =second >< socket server

28、 =localhost port =4444 /></ waitfor >< junit . />< antcall target =tomcat.stop /></ sequential ></ parallel >24.2.4. SpringSide 中的 FunctionalTestCase 基类SpringSide 中抽象了一个 FunctionalTestCase 基类,抽取 了setUp() , tearDown() 函数中 se

29、lenium server 开闭操作。 其中浏览器类型默认为 *iexplore, 基本 url 默认为 http:/localhost:8080 用户可以在 Classpath 根目录中放置 perties 文 件,重新设定 selenium.explorer 和 selenium.baseurl 变量。 24.3. Selenium 测试 Ajax 项目 24.3.1. 匆匆一瞥 Selenium 在典型 的在线商店中,需要用户输入或选择众多步骤后才可以完成 整个购物流程。作为 web应用的开发者,你如何保证你程序 的质量和正确性呢?如果能有办法测试你功能的正确性,

30、那 问题就迎刃而解了,但如何做到呢 ?Selenium 是一个由 ThoughtWorks 做的专门为 web 应用所做 的非常有效的功能测试工具。 Selenium 的 tests 直接在浏览 器里跑,就像用户真的在操作一样。 Selenium 可运行 Windows, Linux, 和Macintosh 的各种浏览器, 如 Internet Explorer, Mozilla 和 Firefox 。看看 Selenium 的 online demo 。点击右上角的 All 按钮来 启动运行 test cases,如无意其外,你将看到所有都是绿行。注意 action的绿色是会比 assert

31、ions 浅的,这是因为他们测试 的所有东西都只是 verify 或 assert 命令。如果有一个 assertion 失败了,则那行命令会变为红色,并且 Selenium 会停止运 行。如果 verify 命令失败了,那行命令也会变为红色,但是 不会让测试停下来。在 Selenium 中的 Test suites 和 cases 实际上是由 HTML写成的, 它们只是很简单的 HTML <table>s 。 test suite 中没行都只是关联了一个 test case, 例如: <tr><td>&

32、;lt;ahref=MyTest.html >MyTest</a></td></tr>test-case 实际上是由 Selenese 写成的 HTML 文档,里面 包有一个 table,3 个列,所有的命令最多只有两个参数,所 以足够位置摆放。一个典型的test case 像这样:当你开始运行测试(例如 按 All 按钮), Selenium 的TestRunner 会自动解释 HTML 格式的 test-case, 并运行你 的 web应用,并在页面下方的框架中显示运行的情形。 Seleniu

33、m 允许你通过在浏览器里模拟用户的行为来进行测 试。这当然不代表它可以代替 unit-testing ,只是我们通常会 用它来进行 web 应用的功能测试。它也可以被加入持续继承 测试 (continuous-integration) 中,作为常规的自动回归测试 (regression testing)。 如果想更深入了解 Selenium,请参看在 线文档 Selenium: Usage.24.3.2. 开始测试 Ajax 在你的web 应用功能是用 JavaScript 实现时, Selenium 就显得极为 有用了。Ajax, 是 Asynchronous JavaScript and

34、XML 的简称,是 web 应用中的一种 web 交互技术。它可以实现在页面不需要刷新的情况下,在后台与服务器交互少量数据,并即时改变页面 内容。这意味着网页看起来更实时,更有动态和更实用。 24.3.3. Ajax 中指示正在 读取数据 的标签刚才那句话是对 Ajax 的技术定义, 对于我们大多数人来说, Ajax 意味着页面 向 GMail 或 Flickr 那样。当你点一个连接时,它不会产生 页面刷新,而是页面会和服务器交互后返回来再更改一部分 页面。在点击连接和看到结果之间延迟的这段时间,让测试 看起来那么的棘手。 让我们来假设我们的页面包含了一个 text field 和一个 but

35、ton。text field 的初始值是 oldValue。如果你点击 button , Ajax 就会启动,并把 text field 的值改为newValue, 而没有 刷新任何页面。那我们怎么去测试它呢? 你会很自然的去 打开页面, 点击 button, 然后检查 text field 。但是你在 Selenium 中的这个 test case 失败了! 测试失败的原因也许并不明显。 这个意外的发生是因为 Ajax 的异步性,它并不会马上从服务器上得到结果。所以当你按 下 button 时, Selenium 就开始马上检查是否有改变值。 Selenium 并不知道需要去等待结果。 那我

36、们如何去让这个测 试在 Ajax 下生效呢? 我们如何去让 Selenium 等待返回的结果呢? 有些人认为解 决这个问题的办法是用 clickAndWait命令来代替 click 命 令;但是在使用以 AndWait 为后序的命令时,Selenium 会 等待页面刷新。但是明显的,页面不会刷新,这样就使得Selenium 永远在等待了。明显这个方法行不通。 另外一个方法是在click 和 assertValue 之间加入暂停时 间。让它暂停 5 秒,让服务器有足够的时间返回相应。这种 方法在大多数时候是可行的,但是如果服务器相应时间大于 5 秒,如网速很慢,测试机重启等的时候,就会失败了。你

37、 或许会加大等待时间来保证更正确,但是这样明显会使得你 的测试越来越慢。所以明显的这个办法并没有按需而慢下拉,所以这也不是最佳的解决办法。幸运的是, Selenium 现在已经提供了这种我们非常需要的技 术支持。当 field 的值在单前页面改变时,你能用 waitForValue 命令去让Selenium 等待到这个期望值出现为 止。所以为了让刚才的失败的测试通过,你需要把它其中的 assertValue命令改变如下:当执行这个命令的时候 , Selenium 会暂停执行当前的 test case 和等待所期待的值。当新的值 newValue 出现在 text field 时, 测试再次开始

38、。但你需要注意的是,如果你写错 期望值了,那 Selenium将会等待这个值 30 分钟。 就如你想到的那样, Selenium 已经提供了很多测试 Ajax 效 果的命令。例如,如果你想等待某些文本会在页面上出现, 那你可用 waitForText 命令 ; 如果你想检查当前页面的 Title 是 否有改变,则用 waitForTitle; 如果你想检查某个 HTML 元素是否有在页面中被移除,应用 waitForElementNotPresent 命令。实际上,对于每个 Selenium Accessor, 都会有相应的 waitForXxxx和 waitForNotXxxx 命令。当你用

39、 verifyXxxx or assertXxxx 去检查某些东西时, 总可以有 waitForXxxx 去 测试异步效果。如果预先确定了 waitForXxxx 和 waitForNotXxxx 命令但 又达不到预期,那会怎样呢? 对于这种情况,我们有 waitForCondition 命令去指定一个 Javascript 的真假表达式 (Boolean expression) , 然Selenium 去等待表达式的值为 true 为止。 waitForCondition 命令的格式是 waitForCondition script timeout (in ms) 这样在测试复杂的Ajax

40、效果时就更为便捷了。 实际上如果你深入研究 Selenium 的source code 的话, 你 会发现所有前序为 waitForXxxx 和waitForNotXxxx 的命 令都是继承了 waitForCondition 的。 GrigGheorghiu 写了一 篇关于这方面的 blog: Ajax testing with Seleniumusing waitForCondition. 当他写这篇文章时,waitForCondition 仅 仅是用户自己扩展 Selenium, 现在已经成为 Selenium 核心 代码的一部分了。 24.3.4. 总结在这篇简短的文章中, 我们 介绍

41、了Selenium ,一个 web 应用测试工具。同样地,我们也 讨论了如何去用 waitForXxxx 命令来测试 Ajax 应用,也演 示了如何用 Selenium去测试一些 Ajax 异步效果。 如果你想知道更多有关于 waitForXxxx命令, Selenium 的 开发者提供了一些简单的测试例子 演示了如何测试 Ajax , 如编辑替换,自动填充和拖拉效果等。这些例子是基于script.aculo.us, 来做的, 它是大家都非常熟悉的 Ajax library-prototype.js 的子项目。(自 http:/ , cac 译。注:之前也翻译了一篇很详细的 Selenium

42、文档, 见 Selenium 中文手册 :http:/ )24.4. selenium 中文手册 24.4.1. Commands ( 命令 )Action对当前状态进行操作 失败时,停止测试Assertion 校验是否有产生正确的值Element Locators指定 HTML 中的某元素Patterns用于模式匹配 . Element Locators ( 元素定位器 )id=id idlocator 指定 HTML 中的唯一 id 的元素name=namename locator 指定 HTML 中相同 name 的元素中的第一个元 素identifier=idident

43、ifier locator 首先查找 HTML 是否存在该 id 的元素 , 若 不存在,查找第一个该 name 的元素dom=javascriptExpressiondom locator 用 JavaScript 表达式来定位 HTML 中的元素 ,注意 必须要以 document 开头例如:dom=document.formsmyForm.myDropdowndom=document.images56xpath=xpathExpressionxpath locator 用 XPath 表达式来定位 HTML 中的元素 ,必须 注意要以 / 开头例如:xpath=/imgalt=The i

44、mage alt textxpath=/tableid=table1/tr4/td2 link=textPatternlink locator 用 link 来选择 HTML 中的连接或锚元素例如:在没有 locator 前序的情况下 Without a locator prefix,Selenium uses:如果以 document. 开头,则默认是使用 dom locator ,如果是 以/ 开头,则默认使用 xpath locator, 其余情况均认作 identifierlocator. String Matching Patterns ( 字符串匹 配模式 )glo

45、b:patthernglob 模式,用通配符 * 代表任意长度字符, ? 代表一个字 符regexp:regexp正则表达式模式,用 JavaScript 正则表达式的形式匹配字符 串exact:string 精确匹配模式,精确匹配整个字符串,不能用通配符 在没有指定字符串匹配前序的时候, selenium 默认使用 golb 匹配模式 . Select Option Specifiers (Select 选项指定器)label=labelPattern通过匹配选项中的文本指定选项例如:label=regexp:AOothervalue=valuePattern通过匹配选项中的

46、值指定选项例如: value=other通过匹配选项的 id 指定选项例如:id=option1index=index通过匹配选项的序号指定选项,序号从 0 开始例如: index=2在没有选项选择前序的情况下,默认是匹配选项的文本24.4.2. Actions 描述了用户所会作出的操作。Action 有两种形式:action 和 actionAndWait, action 会立即执 行,而 actionAndWait 会假设需要较长时间才能得到该 action 的相响,而作出等待,open 则是会自动处理等待时间。24.421.clickclick(elementLocator)点击连接 ,

47、按钮,复选和单选框 如果点击后需要等待响应,则用clickAndWait 如果是需要经过 JavaScript 的 alert 或 confirm 对话框后才能 继续操作,则需要调用verify或 assert来告诉 Selenium你期望对对话框进行什么操作。click - aCheckboxclickAndWait - submitButtonclickAndWait - anyLink . openopen(url) 在浏览器中打开URL, 可以接受相对和绝对路径两种形式 注意:该 URL 必须在与浏览器相同的安全限定范围之内 open - /mypageopen - h

48、ttp:/localhost/. typetype(inputLocator, value) 模拟人手的输入过程,往指定的 input 中输入值 也适合给复选和单选框赋值在这个例子中,则只是给钩选了的复选框赋值,注意,而不 是改写其文本type - nameField - John SmithtypeAndWait - textBoxThatSubmitsOnChange -newValue. selectselect(dropDownLocator, optionSpecifier)根据 optionSpecifier 选项选择器来选择一个下拉菜单选项如果有多

49、于一个选择器的时候,如在用通配符模式, 女如 f*b*, 或者超过一个选项有相同的文本或值,则会选择第一个匹配 到的值select - dropDown - Australian Dollars select - dropDown - index=0selectAndWait - currencySelector - value=AUD selectAndWait -currencySelector - label=Auslian D*rs .goBack,closegoBack() 模拟点击浏览器的后退按钮 close()模拟点击浏览器关闭按钮 . selec

50、tWindowselect(windowId)选择一个弹出窗口 当选中那个窗口的时候,所有的命令将会转移到那窗口中执 行selectWindow - myPopupWindow selectWindow - null .pausepause(millisenconds) 根据指定时间暂停 Selenium 脚本执行常用在调试脚本或等待服务器段响应时 pause - 5000pause - 2000 .fireEventfireEvent(elementLocatore,evenName) 模拟页面元素事件被激活的处理动作fireEvent - textField

51、 - focus fireEvent - dropDown - blur .waitForConditionwaitForCondition(JavaScriptSnippet,time) 在限定时间内,等待一段 JavaScript 代码返回 true 值,超时 则停止等待waitForCondition - var value=selenium.getText(foo);value.match(/bar/); - 3000 0.waitForValuewaitForValue(inputLocator, value) 等待某 input(如hidden in

52、put)被赋予某值,会轮流检测该值,所以要注意如果该值长时间一直不赋予该 input 该值的话,可能会导致阻塞waitForValue - finishIndication - isfinished 1.store,stroreValuestore(valueToStore, variablename) 保存一个值到变量里。该值可以由自其他变量组合而成或通过 JavaScript 表达式赋 值给变量store - Mr John Smith - fullnamestore - $. title $. firstname$. suname- fullnamestore - jav

53、ascript. Math.round(Math.PI*100)/100 - PI storeValue -inputLocator - variableName把指定的 input 中的值保存到变量中storeValue - userName - userIDtype - userName - $. userID2. storeText,storeAttributestoreText(elementLocator, variablename) 把指定元素的文本值赋予给变量storeText - currentDate - expectedStartDateverifyValu

54、e - startDate - $. expectedStartDate3.storeAttribute(. elementLocatorattributeName,variableName.)把指定元素的属性的值赋予给变量storeAttribute input1class classOfInput1verifyAttribute input2class $. classOflnput1 4.chooseCancel., answer.chooseCancelOnNextConfirmation() 当下次 JavaScript 弹出 confirm 对话框的

55、时候 ,让 selenium 选 择 Cancel如果没有该命令时,遇到 confirm 对话框 Selenium 默认返回 true,如手动选择 OK 按钮一样chooseCancelOnNextConfirmation 如果已经运行过该命令,当下一次又有 confirm 对话框出现 时,也会同样地再次选择 CancelanswerOnNextPrompt(answerString)在下次 JavaScript 弹出 prompt 提示框时,赋予其 anweerString 的值,并选择确定answerOnNextPrompt Kangaroo 24.4.3. Assertions 允许用户

56、去 检查当前状态。两种模式:Assert 和 Verify,当 Assert 失败, 则退出测试;当 Verify 失败,测试会继续运行。 . assertLocation,assertTitleassertLocation(relativeLocation) 判断当前是在正确的页面 verifyLocation /mypage assertLocation /mypage .assertTitle(titlePattern) 检查当 前页面的 title 是否正确 verifyTitle MyPage assertTitle My Page .

57、assertValueassertValue(inputLocator, valuePattern)检查 input 的值对于 checkbox 或 radio,如果已选择,则值为on,反之为offverifyValue nameField John SmithassertValue Field John Smith .assertSelected,assertSelectedOptionsassertSelected(selectLocator,optionSpecifier)检查 select 的下拉菜单中选中的选型是否和option

58、Specifer(Select 选择选项器 )的选项相同verifySelected dropdown2 John SmithverifySelected dorpdown2 value=js*123assertSelected document.forms2.dropDown label=J*SmithassertSelected document.forms2.dropDown index=0.assertSelectOptions(selectLocator, optionLabelList) 检查下拉菜 单中的选项的文本是否和 optionLabelList 相同opt

59、ionLabelList 是以逗号分割的一个字符串 verifySelectOptionsdropdown2 John Smith,Dave Bird assertSelectOptionsdocument.forms2.dropdown Smith,J,Bird,D.assertTextassertText(elementLocator,textPattern) 检查指定元素的文本 只对有包含文本的元素生效对于 Mozilla 类型的浏览器,用 textContent 取元素的文本, 对于 IE类型的浏览器,用 innerText 取元素文本 verifyText statu

60、sMessageSuccessful assertText /divid=foo/h1 Successful .assertAttribute(. elementLocatorattributeName. ,ValuePattern)检查当前指定元素的属性的值 verifyAttributetxt1class bigAndBlod assertAttribute document.images0altalt-text verifyAttribute /imgid=foo/alt alt-text .assertTextPresent, etc.assertTex

61、tPresent(text)assertTextNotPresent(text) assertElementPresent(elementLocator)verifyElementPresent submitButton assertElementPresent/imgalt=foo assertElementNotPresent(elementLocator).assertTableassertTable(cellAddress, valuePattern) 检查 table 里的某个 cell 中的值 cellAddress 的语法是 tableName.row.column, 注意行列序号 都是从 0 开始 verifyTable myTable.1.6 SubmittedassertTable results0.2 13 0. assertVisible,nonVisibleassertVisible(elementLocator) 检查指定的元素是否可视的隐藏一个元素可以用设置css 的visibility属性为hidden,也可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论