一
Selenium IDE 命令分为三类: Action, Accessor,Assertion
Action命令用于操作程序的状态, Accessor命令用于检查应用程序的状态,并将结果存储在变量中,例如“storeTitle”。他们可用于自动生Assertion。 Assertion命令类似于Accessor命令,但是他会验证应用程序的状态,并确认这些状态符合预期的结果。
1. Action:
“...AndWait”命令等于原命令+waitForPageToLoad,在操作后,页面需要刷新的情况用这种命令。如果不需要善心,用这种命令会出错。
1.1 浏览器操作: 如果没有参数,target和value的值可以不填。 target是元素的定位表达式
(1)open:
- 当Target为空中,将打开Base URL的界面
- 当Target不为空时,将打开Base URL + Target的界面
- 当Target以http://开头时,将覆盖Base URL的值
(2)goBack
(3)refresh
- 没有参数的话,target和value可以不填
(4)windowFocus()
- 用于激活当前选中浏览器的窗口
(5)widowMaximize
(6)close()
1.2 界面元素的基本操作
(1)type(locator, value)
- 用于input类型的元素输入值,也可以是下拉框,复选框
(2)typeKeys(type类似于SWTBot中的setText,typeKeys类似于SWTBot中的typeText)
- 模拟键盘敲击事件,一个个输入值。这个相当于调用了keyDown,keyUp,keyPress.
- typeKeys和type命令不同,type命令会一次性强制录入制定的值(而不是键盘上拥有的字符,如汉字),而typeKeys相当于一个键一个键地按。在某些情况下,可能先使用type命令来设置字段的值,然后使用keyTypes来触发刚刚输入字符的键盘事件。(??)
(3)click(locator)
(4)clickAt(locator, coordString(need coordString, is different with "click(locator)"))
- value: 指定元素上单击的坐标(与click(locator)命令类似,但是需要指定坐标)
(5)doubleClick(locator)
- 如果导致页面重载,用doubleClickAndWait
(6)doubleClickAt(locator,coordString)
(7)select(selectLocator,optionLocator)
- 该命令用于在下拉列表框中(与swtbot有很大的不同)选择指定选项
- 选项的定位方式和下拉框的定位方式有所不同
label=文本值,基于选型的文本进行匹配(默认方式),例如label=three
value=真实值,基于选型的真实值进行匹配,例如value=3
id=id,基于选项的id进行匹配,例如id=option3
index=index,基于选项的索引进行匹配,例如index=2
(8)check(locator)
- 必要时可以使用click命令来勾选复选框,(与swtbot相同)
(9)unCheck(locator)
(10)Focus(locator)
1.3 键盘鼠标模拟操作
- 键名+KeyDown(),键名+KeyUp(), 成对使用
- 所有的KeyDown/KeyUp命令,只有按顺序使用,就能形成组合键。例如Ctrl+Alt+C,先CtrlKeyDonw,AltKeyDown,KeyDown,这样就按下了快捷键,之后再一个个up
1.4 设置类操作
(1) setTimeOut(timeout): (功能类似于SWTBot)
- 默认时间是30s
(2)setSpeed(value)
- 设置各个测试步骤(类似于SWTBotPreference.Delay)之间执行的时间间隔
- 默认值为0s
1.5 测试控制/调试类操作:
(1)pause(time)
(2)break()
- 暂停当前正在执行的测试,直到用户手动单价继续按钮
(3)captureEntirePageScreenShot(filename,kwarges)
- 将当前窗口进行截图,并保存为png文件
(4)highligh(locator)
- 暂时将指定元素的背景色改为黄色,并在稍后取消该结果
(5) echo(message)
- 打印出log结果
2. Accessor
(1) store(value, variableName)
- 最基本的存储方式,就是将值value付给变量variableName
(2) storeTitle(variableName)
(3)storeLocation(variableName)
- 用于存储当年网页的URL
(4)storeValue(locator, variableName)
- 把位置是locator的值放到变量variableName里面
- 如果是复选框或是单选框,勾选会输出on,不勾选输出off
(5)storeEditable(locator,variableName)
- 输出true或是false
(6)storeText(locator,variableName)
- 存储某个元素的文本值(概念??)
(7)storeChecked(locator,variableName)
(8)storeSelectedIndex(selectLocator,variableName)
- 获取所选项在列表中的索引(概念??)(从0开始)
(9)storeSeletedLabel(selectLoactor,variableName)
(10)storeSeletedValue(selectLocator, variableName)
(11) storeSelectedOptions(selectLocator, variableName)
- 获取指定下拉列表中的所有文本
(12)storeTable(tableCellAdress, variableName)
- 获取表格中某个单元格的值
- Target的形式为: 表格的定位表达式.行号.列号,e.g foo.1.4
- table的定位符可能是XPath
(13) storeAttribution(attributionLocator,variableName)
- target: 是属性的定位表达式,而不是元素的定位表达式,格式为“元素定位表达式” + “@属性名称”, e.g.foo@bar
(14)storeTextPresent(pattern,variableName)
- 查看指定的文本是否存在
- target: 指定的文本
(15)storeElementPresent(locator, variableName)
- 查看指定的元素是否村子
- taget: 指定元素的定位表达式
(16)storeVisible(locator,variableName)
- 类似于storeElementPresent,适用于使用storeElementPresent返回true,但是实际在页面上找不到。这是visibility属性是hidden或是display是none
(17)storeSpeed(variableName)
3. Assertion
Assertion命令都可以通过3种模式使用: assert,verify,waitFor。区别在于assert失败,case会中断。verify失败,case会继续执行,失败会记录下来。因此用单个assert来确认当年应用程序是否位于正确的页面,然后接下来使用一系列verify命令来做其他的测试。
二
TARGET && VALUE
大部分情况下,Target是一种定位表达式,其格式为“定位类型=定位值”,在大部分情况下,定位类型是可以省略的,根据使用情景的不同,定位类型也不相同。
1. identifier定位
identifier定位首先匹配首个id的值等于identifier值的页面元素,如果找不到id匹配的,就需要收个那么属性的值等于identifire值的页面元素。如果name属性和id属性都找不到的话,定位就会失败。例: identifier=loginForm
2. id定位
3. name定位
- name定位方式会首先搜索首个name值等于定位值的元素,如果有多个name值相同的元素,可以使用过滤器。
例:name=username; name=continue, value=Clear,name=continue,clear(省略“value”), name=continue,type=button。
注意: name定位和id定位适用于页面结构频繁发生变化的时候
4. XPath定位
- 可以通过id和name定位,也可以使用相对路径进行定位,使用绝对路径进行定位不推荐。
- XPath表达式中以“//”开头,那么target表达式中,就不用包含“XPath=”了
5.连接文字定位:
只需简单简单提供连接文本,格式为“link=”
6. DOM定位:不常用
7. CSS定位:(Cascading Style Sheets)
1. 格式为CSS=
2. CSS方式比XPath方式更快,更容易找到HTML中的复杂对象。
8. Value值可以是String类型,也可以是JavaScript
三
SELENIUM
1. Selenium 1的工作原理:
1. 1 Selenium组件
1.2 Selenium服务器
1.3 Selenium客户端库文件
2. 安装并使用Selenium && Selenium Server:下载地址: http://selenium.org/download/
3. Selenium1的API跟Selenium IDE里面一样:
3.1: getValue(location): 用于获得输入文本的值等
getText(location):获得某个元素的文本值
3.2 getSelectOptions(selectLocator): 获取指定列表中所有选项的文本,返回值为String【】
3.3 getTable(tableCellAddress):获取表格中某个单元格的值
3.4 getAttribute(attributeLocator):attributeLoactor是属性的定位表达式,而不是元素的定位表达式,表达式为元素的定位表达式@属性名称
3.5 getXpathCount(locator):获取符合XPath表达式的数量
3.5 WaitForPageToLoad(timeout):
- 等待页面加载完毕,浏览器状态栏为“完成”时,表示页面加载完毕, open命令,已带有WaitForPageToLoad工程,无需再等待
3.6 setTimeOut(timeout)
- 用于设置默认超时时间,主要与open()或WaitForXXX()结合使用
3.7 captureEntirePageScrrenshot(filename,kwargs):
- 将当前窗口截图并保存为pNG文件
- 截图功能只在浏览器*firefox,*chrome和*iexploreproxy使用
3.8 CaptureSecreenshot(fileName)
- 获取整个屏幕的内容,而3.7是只获取浏览器窗口中的内容。CaptureScreenShot,不限浏览器
4. JavaScript弹出对话框的处理:
Selenium 1对JavaScript对话框进行预处理,所有使用selenium测试不会弹出JavaScript对话框。这是因为在弹出前已经处理了。
4.1 Alert命令
- IsAlertPresent
- GetAlert
4.2 Confirmation命令
- IsConfirmationPresent
-ChooseOkOnNextConfirmation
- ChooseCancleOnNextConfirmation
4.3 Prompt命令
- IsPromptPresent
- GetPrompt
- AnswerOnNextPrompt(text)
输入text文本
5. 浏览器多窗口处理
5.1 GetAllWindowsIds,GetAllWindowNames,GetAllWindowTitles返回字符串数组
窗口的ID几乎没有意义,实际测试中使用比较少。name表示这些窗口对于selenium测试的名称,由selenium进行命名,而不是web应用程序。title则是各个窗口的标题。在测试中通常使用name作为标识,因为他不会发生变化,而title经常会发生变化。
5.2 WaitForPopUp(windowID,timeout)
5.3 SelectPopUp(windowID)/SelectWindow(windowID) ---类似于SWTBot中的select
- SelecpPopUp多用于选择子窗口,SelectWindow可用于选择任意窗口
5.4 OpenWIndow(url,windowID)
- 在某个弹出窗口中打开新的url
6. 结束测试
Close(),Stop(),shutDownSeleniumServer()
- Close()用于关闭测试所用的浏览器,而Stop方法用于终止当前对selenium的服务器的会话并关闭selenium控制界面。一般在结束时,会同时调用这两个方法
四 Selenium 2(WebDriver)
1. 选择浏览器开始测试,e.g WebDriver driver = new FireFoxDriver();
2. 浏览器导航对象:在获取该对象之后,就可以执行跳转到指定URL,前进,后退,刷新页面等操作了: to(),back(),Refrsh()
3. 查找对象By
3.1 ID(id)
- e.g. driver.findElement(By.id("kw"))
3.2 Name(name)
- driver.findElement(By.name("tj_login"))
3.3 LinkText(linkText)
- 按连接的文本进行查找,例如百度首页的登陆:.findElement(By.linkText("登陆"))
3.4 PartialLinkText(text)
- 按连接的文本进行模糊查找
3.5 ClassName(className)
- 按元素的class属性进行查找
3.6 TagName(tagName)
- 按照标记名称进行查找,并返回第一个匹配项
3.7 XPath(xPath)
- 其他的方法都找不到的话,用xPath进行查找
4. 操作页面元素:
4.1 click
4.2 sendkeys(text): 用于给input元素输入文本
4.3 clear: 清空input元素的值
4.4 Submit:用于对指定元素所在的form元素进行提交操作。(不太熟)
5. 获取页面元素及页面元素的内容
5.1 getTitle()
5.2 getCurrentUrl()
5.3 getText()
5.4 isSelected()
- 用于获取复选框或是单选框的勾选情况
5.5. getTagName()
- 用于获取元素的tag名字
5.6 isEnabled()
- 用于存储input等元素的可编辑状态
5.7 isDisplay()
5.8 GetAttribute(attributeName)
- 获得指定属性的值
6. 弹出对话框的处理-与selenium不同
- JavaScript共有三种弹出对话框:Alert,Confirmation,Prompt
- 将三种对话框都视为Alert对象,并且可以看到弹出的对话框
6.1 Accept()
- 相当于click 确定按钮
- 用法为如下:
btn.click()
driver.switchTo().alert().accept();
6.2 Dismiss()
- 相当于click 取消按钮
- 用法如下:
btn.click();
driver.switchTo().Dismiss();
- 对于alert,dismiss和accept是一样的,所有没有必要用alert
6.3 sendKeys(text)
- 紧适用于Prompt
6.3 getText()
- 获取谈粗对话框的文本内容
7. 浏览器多窗口处理
7.1 getWindowHandles()
- 取得所有窗口的标识符(句柄)
7.2 window(windowName)
- 窗口之间的切换用switchTo
8. 设置管理
在selenium 2中,可以通过Options对象对测试进行设置,设置内容包括Cookie,超时时间和浏览器窗口。获得Options对象如下:
WebDriver driver = new FireFox(); Options option = driver.manage();
8.1 getCookies():
- option.getCookies()
8.2 windows()
- 可以对当年的窗口进行简单的控制,例如查看窗体的坐标和大小,并将其最大化。
- Window window = option.window();
int width = window.getSize().width;
int length = window.getSize().height;
window.maximize();
8.3 Timeouts():
- Timeouts()方法会获得Timeouts对象。Timeouts timeout = option.timeouts();
- Timeouts对象包含3种方法。
- ImplicitlyWait():设置脚本在查找元素时的最大等待时间
- SetPageLoadTimeout():页面操作超时时间,例如页面进行跳转或刷新的最大等待时间。
- SetScriptTimeout():设置脚本异步执行的时间。
e.g timeout.implicitlyWait(30, TimeUnit.SECONDS);
9 为测试操作添加事件
9.1