Selenium备忘手册 [转]

    最近的项目准备用Selenium作一部分的Regression Test。在SpringSide里参考了一下,又下了个Selenium IDE玩玩,觉得还蛮容易上手,基本上不需要手动写测试代码。
    但实操起来时面对各种复杂的页面情况遇到不少麻烦。感觉Selenium 的offical documentation写的比较high level, 最后找了个though works的ppt,算得上比较全面易懂。匆匆翻译了一下,供后来者参考。


一、 格式
1. Test Case 格式


2. Test Suites 格式

 Title
 TestCase1.html
 TestCase2.html
 TestCase3.html

二、 Commands (命令)

  • Action
    对当前状态进行操作
    失败时,停止测试
  • Assertion
    校验是否有产生正确的值
  • Element Locators
    指定HTML中的某元素
  • Patterns
    用于模式匹配

1. Element Locators (元素定位器)

  • id=id
    id locator 指定HTML中的唯一id的元素 
  •  name=name
    name locator指定 HTML中相同name的元素中的第一个元素
  •  identifier=id
    identifier locator 首先查找HTML是否存在该id的元素, 若不存在,查找第一个该name的元素 
  • dom=javascriptExpression
    dom locator用JavaScript表达式来定位HTML中的元素,注意必须要以”document”开头
    例如:
    dom=document.forms[‘myForm’].myDropdown
    dom=document.images[56]
  •  xpath=xpathExpression
    xpath locator用 XPath 表达式来定位HTML中的元素,必须注意要以”//”开头
    例如:
    xpath=//img[@alt=’The image alt text’]
    xpath=//table[@id=’table1’]//tr[4]/td[2]
  •  link=textPattern
    link locator 用link来选择HTML中的连接或锚元素
    例如:
    link=The link text
  • 在没有locator前序的情况下 Without a locator prefix, Selenium uses:
    如果以”document.”开头,则默认是使用 dom locator,如果是以“//”开头,则默认使用xpath locator,其余情况均认作identifier locator

2. String Matching Patterns (字符串匹配模式)

  • glob:patthern
    glob模式,用通配符”*”代表任意长度字符,“?”代表一个字符
  • regexp:regexp
    正则表达式模式,用JavaScript正则表达式的形式匹配字符串
  • exact:string
    精确匹配模式,精确匹配整个字符串,不能用通配符
  • 在没有指定字符串匹配前序的时候,selenium 默认使用golb 匹配模式

3. Select Option Specifiers (Select选项指定器)

  • label=labelPattern
    通过匹配选项中的文本指定选项
    例如:label=regexp:^[Oo]ther
  • value=valuePattern
    通过匹配选项中的值指定选项
    例如:value=other
  • id=id
    通过匹配选项的id指定选项
    例如: id=option1
  • index=index
    通过匹配选项的序号指定选项,序号从0开始
    例如:index=2
  • 在没有选项选择前序的情况下,默认是匹配选项的文本

三、 Actions
描述了用户所会作出的操作。
Action 有两种形式: action和actionAndWait, action会立即执行,而actionAndWait会假设需要较长时间才能得到该action的相响,而作出等待,open则是会自动处理等待时间。

  • click
    click(elementLocator)
    - 点击连接,按钮,复选和单选框
    - 如果点击后需要等待响应,则用”clickAndWait”
    - 如果是需要经过JavaScript的alert或confirm对话框后才能继续操作,则需要调用verify或assert来告诉Selenium你期望对对话框进行什么操作。
     click aCheckbox 
     clickAndWait submitButton 
     clickAndWait  anyLink 

  • open
    open(url)

    - 在浏览器中打开URL,可以接受相对和绝对路径两种形式
    - 注意:该URL必须在与浏览器相同的安全限定范围之内
     open  /mypage 
     open  http://localhost/   

  • type
     type(inputLocator, value)
    - 模拟人手的输入过程,往指定的input中输入值
    - 也适合给复选和单选框赋值
    - 在这个例子中,则只是给钩选了的复选框赋值,注意,而不是改写其文本
     type nameField  John Smith
     typeAndWait  textBoxThatSubmitsOnChange newValue

  • select
    select(dropDownLocator, optionSpecifier)
    - 根据optionSpecifier选项选择器来选择一个下拉菜单选项
    - 如果有多于一个选择器的时候,如在用通配符模式,如”f*b*”,或者超过一个选项有相同的文本或值,则会选择第一个匹配到的值
     select   dropDown  Australian Dollars
     select   dropDown  index=0
     selectAndWait  currencySelector  value=AUD
     selectAndWait  currencySelector  label=Auslian D*rs

  •   goBack,close
    goBack()
    模拟点击浏览器的后退按钮
    close()
    模拟点击浏览器关闭按钮
  • selectWindow
    select(windowId)
    - 选择一个弹出窗口
    - 当选中那个窗口的时候,所有的命令将会转移到那窗口中执行
     selectWindow  myPopupWindow 
     selectWindow null 

  • pause
    pause(millisenconds)
    - 根据指定时间暂停Selenium脚本执行
    - 常用在调试脚本或等待服务器段响应时
     pause  5000 
     pause  2000 

  • fireEvent
      fireEvent(elementLocatore,evenName)
    模拟页面元素事件被激活的处理动作
     fireEvent  textFieldfocus 
     fireEvent dropDown blur

  • waitForCondition
    waitForCondition(JavaScriptSnippet,time)

    - 在限定时间内,等待一段JavaScript代码返回true值,超时则停止等待
     waitForCondition  var value=selenium.getText("foo"); value.match(/bar/); 3000

  • waitForValue
    waitForValue(inputLocator, value)
    - 等待某input(如hidden input)被赋予某值,
    - 会轮流检测该值,所以要注意如果该值长时间一直不赋予该input该值的话,可能会导致阻塞
     waitForValue finishIndicationisfinished 
       

  • store,stroreValue
    store(valueToStore, variablename)
    保存一个值到变量里。
    该值可以由自其他变量组合而成或通过JavaScript表达式赋值给变量
     store  Mr John Smith fullname
     store  ${title} ${firstname} ${suname} fullname
     store  javascript{Math.round(Math.PI*100)/100} PI
     storeValue inputLocator variableName

    把指定的input中的值保存到变量中
     storeValue  userName userID 
     type  userName  ${userID}

  • storeText, storeAttribute
    storeText(elementLocator, variablename)
    把指定元素的文本值赋予给变量
     storeText  currentDate  expectedStartDate
     verifyValue  startDate  ${expectedStartDate}

    storeAttribute( elementLocator@attributeName,variableName )
    把指定元素的属性的值赋予给变量
     storeAttribute input1@class   classOfInput1
     verifyAttribute  input2@class  ${classOfInput1}

  • chooseCancel.., answer..
    chooseCancelOnNextConfirmation()
    - 当下次JavaScript弹出confirm对话框的时候,让selenium选择Cancel
    - 如果没有该命令时,遇到confirm对话框Selenium默认返回true,如手动选择OK按钮一样
     chooseCancelOnNextConfirmation    

    - 如果已经运行过该命令,当下一次又有confirm对话框出现时,也会同样地再次选择Cancel
    answerOnNextPrompt(answerString)
    - 在下次JavaScript弹出prompt提示框时,赋予其anweerString的值,并选择确定
     answerOnNextPrompt  Kangaroo  

四、 Assertions
允许用户去检查当前状态。两种模式: Assert 和 Verify, 当Assert失败,则退出测试;当Verify失败,测试会继续运行。

  • assertLocation, assertTitle
    assertLocation(relativeLocation)
    判断当前是在正确的页面
     verifyLocation  /mypage 
     assertLocation  /mypage 

  • assertTitle(titlePattern)
    检查当前页面的title是否正确
     verifyTitle  My Page  
     assertTitle  My Page  

  • assertValue
    assertValue(inputLocator, valuePattern)
    - 检查input的值
    - 对于 checkbox或radio,如果已选择,则值为”on”,反之为”off”
     verifyValue  nameField  John Smith
     assertValue  document.forms[2].nameField John Smith

  • assertSelected, assertSelectedOptions
    assertSelected(selectLocator, optionSpecifier)
    检查select的下拉菜单中选中的选型是否和optionSpecifer(Select选择选项器)的选项相同
     verifySelected  dropdown2  John Smith
     verifySelected  dorpdown2  value=js*123
     assertSelected  document.forms[2].dropDown label=J*Smith
     assertSelected  document.forms[2].dropDown  index=0

  • assertSelectOptions(selectLocator, optionLabelList)
    - 检查下拉菜单中的选项的文本是否和optionLabelList相同
    - optionLabelList是以逗号分割的一个字符串
     verifySelectOptions  dropdown2  John Smith,Dave Bird
     assertSelectOptions  document.forms[2].dropdown Smith,J,Bird,D

  • assertText
    assertText(elementLocator,textPattern)
    - 检查指定元素的文本
    - 只对有包含文本的元素生效
    - 对于Mozilla类型的浏览器,用textContent取元素的文本,对于IE类型的浏览器,用innerText取元素文本
     verifyText  statusMessage  Successful
     assertText  //div[@id='foo']//h1 Successful

     
  • assertTextPresent, assertAttribute
    assertTextPresent(text)
    检查在当前给用户显示的页面上是否有出现指定的文本
     verifyTextPresent  You are now logged in  
     assertTextPresent  You are now logged in  

  • assertAttribute( elementLocator@attributeName , ValuePattern)
    检查当前指定元素的属性的值
     verifyAttribute txt1@class  bigAndBlod
     assertAttribute  document.images[0]@alt alt-text
     verifyAttribute  //img[@id='foo']/alt  alt-text

  • assertTextPresent, etc.
    assertTextPresent(text)
    assertTextNotPresent(text)
    assertElementPresent(elementLocator)
     verifyElementPresent   submitButton     assertElementPresent   //img[@alt='foo']    assertElementNotPresent(elementLocator)
  • assertTable
    assertTable(cellAddress, valuePattern)
    - 检查table里的某个cell中的值
    - cellAddress的语法是tableName.row.column, 注意行列序号都是从0开始
     verifyTable  myTable.1.6 Submitted
     assertTable  results0.2  13

     
  • assertVisible, nonVisible
    assertVisible(elementLocator)
    - 检查指定的元素是否可视的
    - 隐藏一个元素可以用设置css的‘visibility’属性为’hidden’,也可以设置‘display’属性为‘none’
     verfyVisible  postcode  
     assertVisible  postcode  

  • assertNotVisible(elementLocator)
     verfyNotVisible   postcode     assertNotVisible   postcode   
  • Editable, non-editable
    assertEditable(inputLocator)
    检查指定的input是否可以编辑
     verifyEditable  shape  
     assertEditable  colour  

  • assertNotEditable(inputLocator)
    检查指定的input是否不可以编辑
  • assertAlert
    assertAlert(messagePattern)
    - 检查JavaScript是否有产生带指定message的alert对话框
    - alert产生的顺序必须与检查的顺序一致
    - 检查alert时会产生与手动点击’OK’按钮一样的效果。如果一个alert产生了,而你却没有去检查它,selenium会在下个action中报错。
    - 注意:Selenium 不支持 JavaScript 在onload()事件时 调用alert();在这种情况下,Selenium需要你自己手动来点击OK.
  • assertConfirmation
    assertConfirmation(messagePattern)
    - 检查JavaScript是否有产生带指定message的confirmation对话框和alert情况一样,confirmation对话框也必须在它们产生的时候进行检查
    -  默认情况下,Selenium会让confirm() 返回true, 相当于手动点击Ok按钮的效果。你能够通过chooseCancelOnNextConfirmation命令让confirm()返回false.同样 地,如果一个cofirmation对话框出现了,但你却没有检查的话,Selenium将会在下个action中报错
    - 注意:在Selenium的环境下,confirmation对话框框将不会再出现弹出显式对话框
    - 注意:Selenium不支持在onload()事件时调用confirmation对话框,在这种情况下,会出现显示confirmatioin对话框,并需要你自己手动点击。
  •  assertPrompt
    assertPrompt(messagePattern)
    - 检查JavaScript是否有产生带指定message的Prompt对话框
    - 你检查的prompt的顺序Prompt对话框产生的顺序必须相同
    - 必须在verifyPrompt之前调用answerOnNextPrompt命令
    - 如果prompt对话框出现了但你却没有检查,则Selenium会在下个action中报错
     answerOnNextPrompt  Joe  
     click  id=delegate  
     verifyPrompt  Delegate to who?  


五、 Parameters and Variables
参数和变量的声明范围由简单的赋值到JavaScript表达式赋值。
Store,storeValue 和storeText 为下次访问保存值。
在Selenium内部是用一个叫storeVars的map来保存变量名。

  • Variable Substitution 变量替换
    提供了一个简单的方法去访问变量,语法 ${xxx}
     store   Mr  title
     storeValue  nameField  surname
     store   ${title} ${suname} fullname
     type  textElement  Full name is: ${fullname}

  •  JavaScript Evaluation JavaScript赋值
    你能用JavaScript来构建任何你所需要的值。
    这个参数是以javascript开头,语法是 javascript{‘with a trailing’}。
    可以通过JavaScript表达式给某元素赋值。
    store  javascript{'merchant'+(new Date()).getTime()}  merchantId
     type textElement  javascript{storedVars['merchantId'].toUpperCase()}

  • Generating Unique values 产生唯一值.  
    问题:你需要唯一的用户名
    解决办法: 基于时间来产生用户名,如’fred’+(new Date().getTime()) 

 

 

  Title 
 命令(Command)  目标(Target)  值(Value)
 命令(Command) 目标(Target)   ( )
 判断(Assertion)  期望值(Expected)  实际值(Actual)

转载于:https://www.cnblogs.com/starspace/archive/2008/11/06/1328140.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js中7种继承的实现和优缺点

原型链继承 function Parent(){this.name kevin }Parent.prototype.getName function(){console.log(this.name) }function Child(){} Child.prototype new Parent()var child new Child() console.log(child.name) //kevin优点: 简单,容易实现缺点&…

u8系统怎么连接服务器,用友U8 怎么连接远程服务器

用友U8 怎么连接远程服务器 内容精选换一换配置应用系统的跨云热备容灾方案如图1所示。在如图1所示的方案中,用户的生产数据中心的应用系统使用MySQL作为数据库,应用系统与MySQL均热备容灾到华为云上。用户的生产数据中心与华为云之间使用专线进行网络连…

使用Java 8 Streams进行编程对算法性能的影响

多年来,使用Java进行多范例编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合。 带有lambda和java.util.stream.Stream类的Java 8是个好消息,因为它使我们可以将功能性编程范例添加到混合中。 确实,lam…

bind搭建(二)反向解析

我们在上一节已经知道了怎么建立DNS的服务器端,可以实现了域名到IP之间的转换。那么好我们现在就来了解一下如何实现反向的DNS解析,也就是IP到域名的映射。 步骤如下: l 在/etc/named中声明反向区域 l 在/var/named/chroot/var/named/中创建…

js求渐升数的第100位

我弟考了道数学竞赛题,问我能不能用代码算结果.. 题目是这样的 用 1、2、3、4、5 组合数字,然后排列大小,从小到大,求排在第100位的数值大小 function foo(chars) {var count 0;if (!chars.length) return;var _foo function(c…

[导入]商业智能2.0?(BI 2.0 from Timo Elliott)

译者注: 关于BI2.0的说法很多,不尽一致,目的只是想多了解一些;译文并不代表译者认可原文观点,只是顺便译了以方便不喜欢E文的朋友。本文是一篇充满探讨及疑问的文章,来自Timo Elliott(Business Objects历史上的第8号员…

poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)

1 /**2 problem: http://poj.org/problem?id32593 spfa判负环&#xff1a;4 当有个点被松弛了n次&#xff0c;则这个点必定为负环中的一个点&#xff08;n为点的个数&#xff09;5 spfa双端队列优化&#xff1a;6 维护队列使其dist小的点优先处理7 **/8 #include<stdio.h&g…

编写干净的测试–用特定领域的语言替换断言

很难为干净的代码找到一个好的定义&#xff0c;因为我们每个人都有自己的单词clean的定义。 但是&#xff0c;有一个似乎是通用的定义&#xff1a; 干净的代码易于阅读。 这可能会让您感到有些惊讶&#xff0c;但是我认为该定义也适用于测试代码。 使测试尽可能具有可读性是我…

如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭?

如何让MFC程序关闭按钮失效&#xff0c;也无法右击任务栏关闭窗口来关闭&#xff0c;即右键任务栏的关闭窗口失效呢&#xff1f;很简单&#xff0c;有一个小窍门就是&#xff1a;响应IDCANCEL消息&#xff0c;具体实现如下&#xff1a; 首先定义消息映射&#xff1a;ON_BN_CLIC…

令人眼睛一亮的履历表

令人眼睛一亮的履历表 你辛辛苦苦写的一份简历&#xff0c;可在人事经理眼里最多只是停留几十秒的时间。如果时机拿捏不好&#xff0c;它会给你造成麻烦&#xff1a;它可能暴露你的短处&#xff0c;而且基本目的都是供人淘汰之用。然而&#xff0c;当你必须做出履历表时&#…

angularjs封装bootstrap官网的时间插件datetimepicker

背景:angular与jquery类库的协作 第三方类库中&#xff0c;不得不提的是大名鼎鼎的jquery,现在基本上已经是国内web开发的必修工具了。它灵活的dom操作&#xff0c;让很多web开发人员欲罢不能。再加上已经很成熟的jquery UI 库和大量jquery 插件&#xff0c;几乎是一个取之不尽…

Java中的得墨meter耳定律–最少知识原理–实际示例

得墨meter耳定律&#xff08;也称为最少知识定律&#xff09;是一种编码原理&#xff0c;它表示模块不应该知道其操作的对象的内部细节。 如果代码依赖于特定对象的内部细节&#xff0c;则很有可能一旦该对象的内部发生更改&#xff0c;它就会被破坏。 由于封装是关于隐藏对象的…

课后作业1

自我介绍 我叫张阔&#xff0c;我的爱好是旅行&#xff0c;游览世界的美好风光&#xff1b; 我的码云个人主页是&#xff1a;https://gitee.com/ZkTt0428&#xff1b; 我的第一个项目地址是&#xff1a;https://gitee.com/ZkTt0428/Frist&#xff1b; 目前代码量有10000行了&am…

记录6月28日的体验,自己现实的感触

2016年6月28日&#xff0c;是我自己要求的要去湖北的日子&#xff0c;可是现在&#xff0c;这个只能成为过去式&#xff0c;只能是提一提&#xff01; 2016年5月17日&#xff0c;我在想&#xff0c;我要通宵加班&#xff0c;做好自己最好&#xff0c;最期待完成的3.0&#xff0…

lucene索引

1。lucene的索引尽量不要频繁而小量的编制&#xff0c;比如&#xff1a;用户每发一个贴子&#xff0c;就加入索引&#xff0c;那样对索引的结构和效率不利。 可以采用定时或者定量&#xff0c;批量处理索引的方式。 2。在批量处理的基础上&#xff0c;解决冲突的问题的方案之一…

针对新手的Java EE7和Maven项目-第4部分-定义Ear模块

从前面的部分恢复 第1部分 第2部分 第3部分 我们正在恢复第四部分&#xff0c;目前我们的简单项目有 Web Maven模块&#xff08;战争&#xff09; 一个ejb模块&#xff08;ejb&#xff09;&#xff0c;其中包含我们的无状态会话bean&#xff08;EJB 3.1&#xff09; 第二…

合并两个有序数组,并输出中间值

示例1&#xff1a; nums1 [1,3] nums2 [2,4] output: (23) / 2 2.5 示例2&#xff1a; nums1 [2,5,7] nums2 [3,6] output:5 Python解决方案&#xff1a; def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int…

Python中关于文件路径的简单操作 [转]

1: os.listdir(path) #path为目录 功能相当于在path目录下执行dir命令&#xff0c;返回为list类型 举例&#xff1a; print os.listdir(..) 输出&#xff1a; [a,b,c,d] 2: os.path.walk(path,visit,arg) path &#xff1a;是将要遍历的目录 visit &#xff1…

生产上完成TopN统计流程

背景 现有城市信息和产品信息两张表在MySQL中&#xff0c;另外有用户点击产品日志以文本形式存在hdfs上&#xff0c;现要求统计每个个城市区域下点击量前三的产品名&#xff0c;具体信息见下方。 mysql> show tables; --------------------------------- | Tables_in_d7 …

最大公因数和最小公倍数

一丶 最大公因数求法&#xff1a;辗转相除法(也称欧几里得算法)原理: 二丶最小公倍数求法&#xff1a;两个整数的最小公倍数等于两整数之积除以最大公约数1 #include <iostream>2 3 using namespace std;4 5 //辗转相除法(欧几里得算法)6 7 int gcd(int a, int b)8 {9…