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程序界面,如下所示:

wKiom1UrthTxSGoxAAFNhjvQ28w267.jpg其中,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服务器。