Selenium 扩展功能

selenium 用户扩展和插件

(转载:http://luyongxin88.blog.163.com/blog/static/9255807201181114747437/)

User extensions 用户扩展,就是给用户提供一个自己写命令的方法。自己写的命令将会和selenium本身的命令一样,可以在IDE中使用,并且输入前几个字母后,IDE还能给出命令的提示。

User extensions are stored in a separate file that we will tell Selenium IDE or Selenium RC to use. Inside there the new function will be written in JavaScript.
Because Selenium‘s core is developed in JavaScript, creating an extension follows the standard rules for prototypal languages. To create an extension, we create a function in the following design pattern.

格式如下:

Selenium.prototype.doFunctionName = function(){
.
.
.
}
The "do" in front of the function name tells Selenium that this function can be called as a command for a step instead of an internal or private function.

为了使用我们自己的用户扩展,需要创建一个文件,例如名为:user-extention.js, 然后在该文件中编辑我们自己的命令函数,该文件中可以存放多个函数。写好后,在selenium中加载自己的扩展,重启IDE就可以使用了。

例如我有以下的一个用户扩展文件:C:\user-extensions.js,其他有多个命令函数(doStoreRandom/ doDisplayAlert/doTypeTodaysDate)

 user-extensions.js 文件

//产生随机数
Selenium.prototype.doStoreRandom = function(variableName){
random = Math.floor(Math.random()*10000000);
storedVars[variableName] = random;
}

//弹出框
Selenium.prototype.doDisplayAlert = function(value, varName) {
    alert(value);
}

//在控件中输入当前日期
Selenium.prototype.doTypeTodaysDate = function(locator){
var dates = new Date();
var day = dates.getDate();
if (day < 10){
day = ‘0‘ + day;
}
month = dates.getMonth() + 1;
if (month < 10){
month = ‘0‘ + month;
}
var year = dates.getFullYear();
var prettyDay = day + ‘/‘ + month + ‘/‘ + year;
this.doType(locator, ‘dddddd‘);
}

加载该用户扩展文件 IDE--》Options--》Options

这里需要注意的时,是在“Selenium Core extensions”中选择我们的文件。原书中说是在“Selenium IDE extensions”中选择,但我那么做之后重启总是提示"error loading Selenium IDE extensions: ReferenceError: Selenium is not defined" 错误信息。后来我整了半天网上找了好久也没找出原因,后来偶然间见到说可以选择core extensions试试,还真没问题了,而且应用正常。

同时,我们也可以发现,如果在user-extensions文件中有什么错误,那么在IDE重启的时候会检测出来,并能给出错误行等信息。

在IDE的command中输入我们自己写的命令

正如前面所述,当我们写了命令的前面部分,IDE就能像其自身命令一下给出提示,并且还多了一个"命令AndWait"命令

另外,注意我们在文件中写的是doStoreRandom,但实际上我们的命令是:storeRandom。 使用命令时去掉了do,只用后面的部分;还有命令的首字母变成了小写,尽管我们文件中写的是大写。

实例1:产生一个随机数字的命令 storeRandom

实例2:向控件中输入当天的日期

打开user-extensions.js,向其他添加以下内容

 //在控件中输入当前日期
Selenium.prototype.doTypeTodaysDate = function(locator){
var dates = new Date();
var day = dates.getDate();
if (day < 10){
day = ‘0‘ + day;
}
month = dates.getMonth() + 1;
if (month < 10){
month = ‘0‘ + month;
}
var year = dates.getFullYear();
var prettyDay = day + ‘/‘ + month + ‘/‘ + year;
this.doType(locator, ‘prettyDay‘);
}

需要说明的是,这个例子告诉我们在我们的代码中还可以使用selenium自身的命令,如上的红色部分就使用了type命令。

实例3:checkDate

有关这个例子我还没看明白,按照书中操作得到错误:this.browserbot.getUserWindow().checkDate is not a function, fileName

后面再看吧

实例4:在以下的地址中,有些比较好的用户扩展代码,

http://wiki.openqa.org/display/SEL/Contributed+User-Extensions

我在想,什么时候我有空了,把那些全部练习一遍,因为有些不是那么明显一操作就会的。

有关Add-ons暂时不打算看了。

有关User Extensions and Add-ons,我在想,是不是在利用RC的时候,这方面的作用体现的不是很明显呢。或者我在需要这些功能的时候,我可以利用我使用的语言本身的功能来解决,例如我想连接数据库,我可以使用java来连接;如我要使用随机数,我用java来产生;例如我要使用Datadriver,我也用java读取文件来实现。当然,User Extensions and Add-ons可能其好处,但我不十分清楚他的优势体现在什么地方。当然非编程操作时还是需要的。

参考书籍:

《零成本实现web自动化测试---基于seleinum与Bromine》

时间: 2024-09-21 05:35:47

Selenium 扩展功能的相关文章

浅析selenium的PageFactory模式

前面的文章介绍了selenium的PO模式,见文章:http://www.cnblogs.com/qiaoyeye/p/5220827.html.下面介绍一下PageFactory模式. 1.首先介绍FindBy类: For example, these two annotations point to the same element: @FindBy(id = "foobar") WebElement foobar; @FindBy(how = How.ID, using = &q

关于在selenium 中 webdriver 截图操作

package prictce; import java.io.File; import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.We

python selenium 处理时间日期控件(十五)

测试过程中经常遇到时间控件,需要我们来选择日期,一般处理时间控件通过层级定位来操作或者通过调用js来实现. 1.首先我们看一下如何通过层级定位来操作时间控件. 通过示例图可以看到,日期控件是无法输入日期,点击后弹出日期列表供我们选择日期,自己找了一个日期控制演示一下,通过两次定位,选择了日期 #-*- coding:utf-8 -*- import time from selenium import webdriver driver = webdriver.Chrome() driver.get

selenium+python在mac环境上的搭建

前言 mac自带了python2.7的环境,所以在mac上安装selenium环境是非常简单的,输入2个指令就能安装好 需要安装的软件: 1.pip 2.selenium2.53.6 3.Firefox44.dmg 4.Pycharm (环境搭配selenium2+Firefox46及以下版本兼容,selenium3+Firefox47+geckodriver) 一.selenium安装 1.mac自带了python2.7,python里面又自带了easy_install工具,所以安装pip用e

Selenium+Java+Eclipse 自动化测试环境搭建

一.下载Java windows java下载链接 https://www.java.com/zh_CN/download/win10.jsp 二.安装Java 安装好后检查一下需不需要配置环境变量,现在java 8已经不用配置环境变量了,直接在命令行输入:java -version 三.下载和安装Eclipse windows Eclipse下载链接 https://www.eclipse.org/downloads/ 你也可以下载绿色版 四.下载selenium,然后解压 selenium

selenium学习笔记(1) 搭建环境

1. 用Eclipse创建maven工程,在pom.xml中添加依赖 1 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> 2 <dependency> 3 <groupId>org.seleniumhq.selenium</groupId> 4 <artifactId>selenium-java</artifactId>

python selenium webderiver 遇到的问题

from selenium import webdriver driver = webdriver.Firefox(executable_path = "C:/Insert/Firefox/geckodriver.exe")driver.get("http://www.baidu.com")driver.maximize_window() driver.find_element_by_id("kw").send_keys("seleni

Selenium+Python的环境配置

因为项目的原因,最近较多的使用了UFT来进行自动化测试工作,半年没有使用Selenium了,于是在自己的电脑上重新配置了基于python3.x的selenium环境,配置过程大致如下: 1. Selenium安装 Selenium在python下的环境配置相对简单,只需在python中安装selenium的包即可. 2. Webdriver安装 但对于针对不同浏览器的webdriver还需单独安装. 之前在使用python2时,并没有对firefox浏览器安装单独的driver,但这次发现对于f

Selenium2(java)selenium常用API 四

WebElement相关方法 1.点击操作 WebElement button = driver.findElement(By.id("login")); button.click(); 由元素对象调用click()方法:   2.清除操作 WebElement username = driver.findElement(By.id("username_input")); username.clear(); 调用之后,会把输入框的内容全部清空:   3.获得元素属性