JavaScript在selenium当中的使用

来源:互联网 发布:javascript的表单验证 编辑:程序博客网 时间:2024/05/29 05:55

Selenium中字符串匹配

正则表达式增加了匹配的灵活性和代码的适用范围。

使用字符串匹配的地方

  1. selenium IDE中很多命令参数写的是“pattern”,看到这个pattern就可以使用以下匹配方式来写参数:

    • glob:全局定位符:*(任何字符)、?(单个字符)。默认
    • regexp:JS 版本的正则表达式
    • regexpi:case-insensitive,大小写敏感的
    • exact:精准匹配

使用时,在参数前加相应前缀即可:regexp:^[0-9]a
Selenese(selenium IDE命令语言的名称) globbing patterns只支持*和[ ]. Selenese regexp提供与JS相同的特殊字符的序列。
使用举例:

PATTERN MATCH . any single character [ ] character class: any single character that appears inside the brackets * quantifier: 0 or more of the preceding character (or group) + quantifier: 1 or more of the preceding character (or group) ? quantifier: 0 or 1 of the preceding character (or group) {1,5} quantifier: 1 through 5 of the preceding character (or group) | alternation: the character/group on the left or the character/group on the right ( ) grouping: often used with alternation and/or quantifier

2. 其中regexp完全使用JS的正则表达式。正则表达式每个语言有不同的实现版本,具体书写的时候需要查看相应语言的官方说明。
JS正则表达式的参考:http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

DOM定位

Selenium中DOM定位的方式采用的是JS的DOM操作方式:
- dom=document.div[‘XXXX’].button[0] 以document.开头
- document.div[0].button[2]
- dom=function foo{ return document.getElementById(“XXXXname”);}; foo();

这种方式的优缺点(相对于其他定位方式xpath,css,id,name,link等):
- 优点:JS允许动态定位,使用灵活
- 缺点:依赖于页面结构

使用示例:英文版w3。

JS HTML DOM

在HTML DOM的帮助下,JS可以获取、操作HTML文件中所有的元素
当一个页面下载时,浏览器就会生成这个页面的DOM。
有了对象模型,JS可以做到的功能有:
- JS可以改变所有HTML元素
- JS可以改变所有属性
- JS可以改变CSS styles
- JS可以移除已存在的HTML元素和属性
- JS可以增加新的HTML元素和属性
- JS可以响应所有存在的HTML事件

点击链接查看完整参考中文网版w3

Flow Control

Selenese本身是不提供条件语句、循环迭代的功能。
在功能性测试时,动态content,可能会涉及到多个页面,这时候可能会涉及到流控制。
当需要使用Flow Control时,有下列三个选项:
1. 使用 Selenium-RC和Client Library比如PHP、JAVA等编码语言的FLOW Control特性
2. 在stroeEval命令中运行小段的JS片段
这里写图片描述
3. 安装goto_sel_ide.js extension,官网可下载

很多测试者,会使用 Selenium-RC API将selenium IDE的test script导出为编码语言文件(第一种方法)。但是很多组织更喜欢在Selenium-IDE中直接运行脚本,这时候(当很多没有编程经验的初级测试运行测试时),就需要考虑使用第2、3种方法了。

goto_sel_ide.js 的使用

可以使用的函数:goto, goto if , while
使用示例:

Command Target Value store 1 x while ${X}<5 echo Value of x is $x storeEval new Number(storedVars[‘x’]+1) x endWhile

存储命令和变量

用Selenium 变量可以存储一些信息,结合data-driven的测试设计,selenium变量可以在command-line,another program, or files之间传递。
selenium利用JS来存储两种参数:非脚本的(通常是表达式),脚本的。

非脚本的
测试用例变量一般通过selenium IDE 的storeXXX系统命令创建。这些storeXXX命令一般会有个叫“variableName”的参数,这个参数一般指存储变量的名称。所有在测试用例中(selenium IDE中通过selenese)创建的变量,都会统一地存在JS associative array中。这个associative array将字符串作为索引值,其名称为storedVars
你可以在一段JS的代码片段中获取、操作一个测试用例变量。JS代码片段中,去获取或者操作一个变量的方法:storedVars[‘yourVariableName’] 。上面的goto_sel_ide.js就是这样的使用方式。

脚本的
有一系列的Selenese命令可以指定一个script参数: assertEval, verifyEval, storeEval, and waitForEval。这些参数不需要特别的语法,就是纯JS代码。
这里写图片描述
JS可以在参数没有指定为script类型时时,就需要特别的语法格式: javascript{JS 代码}

UI-Element的map文件编写

将测试打包复用的方式,其主要工作内容是编写一个ui-map.js文件。这个文件主要是建立UI-Element和真实在页面上的元素之间的映射关系,在这个文件中,可以打包测试用例处理代码,达到方便复用的目的。

用户扩展

用户扩展是用的JS语言编写的文件,可以运行用户自定义的特性。不仅仅局限于附加命令。
点击链接查看其他用户的扩展,需要翻墙。
最流行的用户自定义扩展应该是前面提到的 goto_sel_ide.js
添加扩展的方法:
这里写图片描述
注意:需要重启IDE设置才生效

如何编写扩展参看selenium reference
debugger看这里: Venkman,可以debug XUL/Chrome based extensions,可以debug firefox version 32,和IDE 2.9.0

selenium中如何处理HTML中的JS Alert, Popup, Multiple Window

测试时,由于JS的一些函数与实际运行时的效果不同,所以在selenium中专门有一系列命令用于处理HTML中的JS Alert, Popup, Multiple Window。
示例代码:HTML中JS的使用。

<!DOCTYPE HTML><html><head>  <script type="text/javascript">    function output(resultText){      document.getElementById('output').childNodes[0].nodeValue=resultText;    }    function show_confirm(){      var confirmation=confirm("Chose an option.");      if (confirmation==true){        output("Confirmed.");      }      else{        output("Rejected!");      }    }    function show_alert(){      alert("I'm blocking!");      output("Alert is gone.");    }    function show_prompt(){      var response = prompt("What's the best web QA tool?","Selenium");      output(response);    }    function open_window(windowName){      window.open("newWindow.html",windowName);    }    </script></head>  <body>  <input type="button" id="btnConfirm" onclick="show_confirm()" value="Show confirm box" />  <input type="button" id="btnAlert" onclick="show_alert()" value="Show alert" />  <input type="button" id="btnPrompt" onclick="show_prompt()" value="Show prompt" />  <a href="newWindow.html" id="lnkNewWindow" target="_blank">New Window Link</a>  <input type="button" id="btnNewNamelessWindow" onclick="open_window()" value="Open Nameless Window" />  <input type="button" id="btnNewNamedWindow" onclick="open_window('Mike')" value="Open Named Window" />  <br />  <span id="output">  </span></body></html>

示例代码中涉及JS函数:confirm(“XXXX”)、alert(“XXXX”)、prompt(“XXXX”)、window.open(“newWindow.html”. windowName)

在测试上段代码时,测试者需要模拟用户响应alert/confirm boxes, 还要将focus移到新的pop windows上。
处理它们的函数选项有:assertXXX,verifyXXX,storeXXX等。 comfirmation、alert、prompt box在selenium中有下列相同的处理项:
这里写图片描述
可以查看selenium reference查看,这些函数以selenium命令的形式收录其中。

当在selenium下运行时,JS的pop-ups不会显示地在屏幕上出现:函数调用在实际运行时被selenium自己的JS overridden了。但是,看不见,不代表不用处理它们。处理它们时,就是用assertXXX(pattern)函数,如果assert 失败了,你会得到如下提示:
Error: There was an unexpected Confirmation! [Chose an option.]

selenium常用的js总结

在实践过程中遇到的常用代码。不知道就很麻烦
http://www.cnblogs.com/tobecrazy/p/4817946.html

0 0