JavaScript在selenium当中的使用
来源:互联网 发布:javascript的表单验证 编辑:程序博客网 时间:2024/05/29 05:55
Selenium中字符串匹配
正则表达式增加了匹配的灵活性和代码的适用范围。
使用字符串匹配的地方
selenium IDE中很多命令参数写的是“pattern”,看到这个pattern就可以使用以下匹配方式来写参数:
- glob:全局定位符:*(任何字符)、?(单个字符)。默认
- regexp:JS 版本的正则表达式
- regexpi:case-insensitive,大小写敏感的
- exact:精准匹配
使用时,在参数前加相应前缀即可:regexp:^[0-9]a
Selenese(selenium IDE命令语言的名称) globbing patterns只支持*和[ ]. Selenese regexp提供与JS相同的特殊字符的序列。
使用举例:
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
使用示例:
存储命令和变量
用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
- JavaScript在selenium当中的使用
- Javascript当中的Boolean对象使用注意
- 在Fragment当中使用的startactivityforresult注意事项
- javascript当中的setDate()
- javascript当中的数据类型
- 使用javascript获取下拉列表框当中的文本值
- 在Csharp当中使用注释
- 在C#当中使用注释
- 在C#当中使用注释
- 在Vim当中使用vimwiki
- 在C#当中使用注释
- 在RecyclerView当中使用 contextMenu
- log4net1.2.10 在asp.net 2.0当中的使用
- log4net1.2.10 在asp.net 2.0当中的使用
- log4net1.2.10 在asp.net 2.0当中的使用
- log4net1.2.10 在asp.net 2.0当中的使用
- 在HTML5 主题当中,使用漂亮的中文字体
- 生产者-消费者生产模式 在医疗器械当中的使用
- zookeeper+kafka分布式
- 2016.12.27linux下的C语言gdb调试
- QT中文件目录相关的函数已经操作
- solr在windows下的搭建
- 杨辉三角形
- JavaScript在selenium当中的使用
- js 判断当前的手机系统类型
- 买房:没有大哭过的人生不足以谈买房
- 程序员容易忽略的SQL Server错误集锦
- MySQL主从同步配置(Ubuntu)
- 我所理解的RESTful Web API [设计篇]
- POI导出EXCEL经典实现
- WEKA 3.6 导入libsvm进行分类使用困惑与解决办法
- 有关元素视图学习的一些整理