1. 工作原理
1.1 Selenium 1组件
Selenium 1是Selenium中最主要的第一代测试工具,它能支持几乎所有的浏览器的测试,缺点在于受到JavaScript安全模型导致的限制,并且编程方式更像是面向过程的而非面向对象的。Selenium 1组件包括以下内容:
1) Selenium服务器: 它负责启动或关闭浏览器,解释和运行从测试程序中传来的Selenium命令,并可以扮演HTTP的角色,截获和验证在浏览器和被测试的应用程序之间传递的HTTP消息。
2) 客户端库文件: 提供了各种编程语言和Selenium RC服务器之间的接口。
1.2 Selenium服务器
Selenium服务器用于接收测试程序传来的Selenium命令,解释并执行它们,然后向测试程序反馈测试的结果。RC服务器捆绑了Selenium Core并自动将其注入浏览器,Selenium Core是一系列JavaScript函数,用于调用浏览器内置的JavaScript解释器,以解释和执行Selenese命令。
该服务器同样可以接收来自测试程序的使用简单HTTP GET/POST请求的Selenese命令,这意味着可以使用任何支持HTTP请求的编程语言来编写Selenium测试代码。
1.3 Selenium客户端库文件
客户端库文件提供了对编程的支持,这样就可以自己设计程序来运行Selenium命令。对于每一种支持的编程语言,都有不同的客户端库文件。Selenium客户端库文件提供了编程接口,用于在程序中运行selenium命令,对于每一种接口,都有对应的编程函数支持每一种Selenese命令。
客户端库文件可以生成Selenese命令,然后将其传递到Selenium服务器,对被测试的应用程序执行指定的动作或测试,也可以接收命令执行的结果,并将其传递给应用程序。因此要创建测试程序,只需通过客户端库文件API来编写程序,用它来执行一系列Selenium命令。
2. 开始测试
2.1 启动Selenium服务器
在执行Selenium 1测试之前,必须先启动Selenium服务器,下载地址为:http://docs.seleniumhq.org/download/,位于Selenium Server一栏。下载完毕将得到一个jar文件,如果已经安装了JDK,可以直接双击这个jar文件来启动selenium服务器,或通过java命令来启动,除了这种最基本的方式,还可以通过不同的参数进行启动。
2.2 选择浏览器
要开始测试,首先得创建Selenium的实例,通过DefaultSelenium的构造函数即可创建,代码如下:
import com.thoughtworks.selenium.DefaultSelenium; public class Main { public static void main(String[] args) { DefaultSelenium selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://www.baidu.com"); selenium.start(); } }
执行该命令后,屏幕打开两个窗口,一个是Selenium 1的控制界面,另一个是被测试的Web程序界面,如下所示:
其中,localhost代表Selenium服务器的主机名称或IP地址,4444代表Selenium服务器的端口,*iexplore代表加载对应的浏览器,也可以使用绝对路径加载,最后包含一个起始URL,selenium会指向在该URL上的Selenium资源。
2.3 浏览器和页面元素操作
1) open(url): 实现浏览器页面的跳转。
2) goBack(): 类似浏览器的后退功能。
3) refresh(): 此方法可以刷新整个页面。
4) windowFocus(): 用于激活当前选中的浏览器窗口。
5) windowMaximize(): 用于将当前选中的浏览器窗口最大化。
6) close(): 用于关闭当前选中的浏览器窗口。
7) type(locator, value): 可以在input类型的页面元素中输入指定值。
8) typeKeys(locator, value): 输入键盘拥有的字符,效果等同从键盘逐个输入。
9) click(locator): 可以对链接、复选框或单选框等元素进行单击。
10) clickAt(locator, coordString): 与click命令类似,增加单击坐标参数。
11) doubleClick(locator): 双击链接、复选框或单选框。
12) doubleClickAt(locator, coordString): 与doubleClick命令类似,增加单击坐标参数。
13) select(selectLocator, optionLocation): 选择下拉框的指定选项,选项定位方式例如label=文本值。
14) check(locator)/UnChceck(locator): 勾选或取消勾选复选框。
15) focus(locator): 将焦点转移到指定的元素上。
2.4 鼠标键盘模拟操作
1) altKeyDown(): 模拟按下Alt键不放,直到调用altKeyUp命令。
2) altKeyUp(): 松开alt键。
3) controlKeyDown(): 摸拟按下Ctrl键不放,直到调用controlKeyUp命令。
4) controlKeyUp(): 松开ctrl键。
5) shiftKeyDown(): 模拟按下Shift键不放,直到调用shiftKeyUp命令。
6) shiftKeyUp(): 松开shift键。
7) keyDown(locator, keySequence): 模拟按下某个键不放,直到调用keyUp命令。
8) keyUp(locator, keySequence): 模拟松开某个键。
9) keyPress(locator, keySequence): 模拟用户敲击了某个按键。
10) mouseDown(locator): 模拟用户在指定元素上按下鼠标左键不放。
11) mouseDownAt(locator, coordString): 与mouseDown类似,增加坐标参数。
12) mouseDownRight(locator): 模拟用户在指定元素上按下鼠标右键不放。
13) mouseDownRightAt(locator, coordString): 与mouseDownRight类似,增加坐标参数。
14) mouseUp(locator): 松开鼠标左键。
15) mouseUpAt(locator, coordString): 与mouseUp类似,增加坐标参数。
16) mouseUpRight(locator): 松开鼠标右键。
17) mouseUpRightAt(locator, coordString): 与mouseUpRight类似,增加坐标参数。
18) mouseOver(locator): 将鼠标移动到指定元素内。
19) mouseOut(locator): 将鼠标移动到指定元素外。
2.5 获取页面元素内容
1) getTitle(): 返回当前网页的标题。
2) getLocation(): 获取当前网页的URL。
3) getValue(): 用于存储input元素所存放的值,如文本框、复选框、单选框中的值。
4) isEditable(locator): 用于存储input元素的可编辑状态,如文本框、复选框、单选框的可编辑状态。
5) getText(locator): 用于存储某个元素的文本值,如链接、纯文本等。
6) isChecked(locator): 存储复选框或单选框的勾选情况。
7) getSelectedIndex(selectLocator): 获取所选项在列表中的索引(从0开始)。
8) getSelectedLabel(selectLocator): 获取指定列表中所选项的文本值。
9) getSelectedValue(selectLocator): 获取指定列表中所选项的值。
10) getSelectOptions(selectLocator): 获取指定列表中所有选项的文本,返回字符串数组。
11) getTable(tableCellAddress): 获取表格中某个单元格的值,参数表达式为“表格定位表达式.行号.列号”。
12) getAttribute(attributeLocator): 获取指定属性的值,参数应填写属性的定位表达式而非元素的定位表达式。
13) isTextPresent(pattern): 验证指定的文本是否在页面中出现。
14) isElementPresent(locator): 验证指定元素是否存在于页面中。
15) isVisible(locator): 验证元素是否在页面中显示。
16) getXpathCount(locator): 获取符合XPath表达式的元素的数量。
2.6 测试控制
1) waitForPageToLoad(timeout): 等待页面加载完毕,open()命令已自动带有等待载入功能。
2) setTimeOut(timeout): 用于设置默认超时时间,主要与open()或waitForXXX()等方法结合使用。
3) setSpeed(value): 设置测试的执行速度,也就是各步骤之间的时间间隔。
4) captureEntirePageScreenshot(filename, kwargs): 将当前窗口进行截图并保存为PNG文件。
5) captureScreenshot(filename): 截取整个屏幕的内容,不限浏览器。
6) highlight(locator): 暂时将指定元素的背景色改为***,并在稍后取消该效果。
2.7 JavaScript对话框处理
1) isAlertPresent(): 验证是否弹出过提示框,如果是返回true,否则返回false。
2) getAlert(): 获取提示框的文本内容。
3) isConfirmationPresent(): 验证是否弹出过确认对话框,如果是返回true,否则返回false。
4) getConfirmation(): 获取确认框的文本内容。
5) chooseOkOnNextConfirmation(): 在下一次弹出确认对话框时选择确定。
6) chooseCancelOnNextConfirmation(): 在下一次弹出确认对话框时选择取消。
7) isPromptPresent(): 验证是否弹出过输入框。
8) getPrompt(): 获取输入框的文本内容。
9) answerOnNextPrompt(answer): 在下一次弹出输入框时输入指定的文本。
2.8 多窗口处理
1) getAllWindowIds(): 获得所有打开窗口的ID。
2) getAllWindowNames(): 获得所有打开窗口的名称。
3) getAllWindowTitles(): 获得所有打开窗口的标题。
4) waitForPopUp(windowID, timeout): 等待弹出窗口加载完毕。
5) selectPopUp(windowID)和selectWindow(windowID): 选择指定的弹出窗口。
6) OpenWindow(url, windowID): 在指定弹出窗口中打开新的URL。
2.9 结束测试
1) close(): 关闭测试所使用的浏览器。
2) stop(): 中止当前对Selenium服务器的会话,并关闭Selenium控制界面。
3) shutDownSeleniumServer(): 关闭Selenium服务器。
本文出自 “青锋笔记” 博客,谢绝转载!
原文地址:http://hanviseas.blog.51cto.com/5400240/1636241