WIN7零起点运行Selenium2Library

步骤如下:

  1. 安装Python:下载win32的python安装包,或者到python下载页面寻找适合你操作系统的。(测试:新开命令行窗口,敲击“python”回车)
  2. 安装robotframework:到robotframework主页安装win32的2.7.4版本,或者其他版本。(测试:新开命令行窗口,敲击“pybot –version”回车)
  3. 安装easy_install(或者pip):安装适用于python2.7、win32的0.6c11版本,或者其他版本
  4. 安装Selenium2Library(参考安装文档):
    • 使用1.0.1版本的win32安装包其他版本)进行安装。或者直接用easy_install命令安装,在命令行窗口敲击如下命令:
      easy_install robotframework-selenium2library
    • 根据具体情况敲击如下命令(例如无需再安装robotframework)
      easy_install robotframework
      easy_install selenium
      easy_install decorator
      easy_install docutils
    • 测试:新开命令行窗口,敲击“python”回车,然后在python提示符下输入“import Selenium2Library” ,出现命令行即表明运行已经安装成功,否则将出现大量错误信息。
  5. 用robotframework写一个最简单的case,可以包含如下内容(可使用html文件模板写,也可以下载安装RIDE工具写):
  6. 至此,应该已经可以顺利运行该测试并通过了。
  7. 已知问题的解决方法:
    1. 显示“[ WARN ] Keyword ‘Capture Page Screenshot’ could not be run on failure: No browser is open”,遇到此问题,请打开文件浏览器至Selenium2Library的utils目录,修改其中的browsercache.py文件,将close(self)方法中的语句“browser.quit()”修改为“browser.close()”。即可解决此问题。

如下为一些截图以供参考:

【测试文件】

image

【命令行运行结果】

image

【报告文件】

image

【日志文件】

image

使用RobotFramework的JavaRemoteLibrary

原文地址:http://blog.sina.com.cn/s/blog_654c6ec701015b27.html

终于被迫使用了Java的远程接口库(为了同时使用Java和python的用例库,且为了在pybot下跑速度能快一些),路途比实际想的要坎坷,记录下来。

远程库的原理在前边一篇文章中记录过:

http://blog.sina.com.cn/s/blog_654c6ec70101044p.html

同python版本一样,Java版本也是要搭一个remoteserver。我们先下载它的可执行包。

然后按照网站上的使用说明做了一遍,发现Server起来了,也能连通了。但问题多多。

现成版主要存在3个问题:

1.使用了反射技术,没执行一个关键字都会重新new出一个测试库实例,如果想保持状态(如数据库连接,socket等这样肯定不行。

2.对于相同名字但参数数量不同的重载库函数支持不好。

3.对中文支持不好(这个问题很二,耽误了半天功夫才搞定)。

所以,需要对源码进行一下改造才能真正投入使用。

用SVN 从下面页面找到checkout的 url http://code.google.com/p/jrobotremoteserver/source/checkout

checkout后建立工程,引用刚才下的压缩包里的jar文件。然后就可以调试了。

作者的源码中尝试了2套实现方式,apache的那套半途而废了。所以真正实现的是基于redstone的Server。

真正要修改的也只有org.robotframework.remotelibrary.RemoteServerMethods这个类。

(待续)

Selenium2Library中iframe的操作

原文地址:http://blog.sina.com.cn/s/blog_654c6ec7010149jv.html

使用iframe加载部分网页内容这种用法很常见。我们怎么使用Selenium2Library来操纵通过iframe加载的元素呢?

第一步需要修改Selenium2Library的源代码(它的源代码有问题)

找到,%PythonHome%\Lib\site-packages\Selenium2Library\keywords\_browsermanagement.py

打开它,找到select_frame这个方法。

将代码修改为如下:

def select_frame(self, locator):
       “””Sets frame identified by `locator` as current frame.

       Key attributes for frames are `id` and `name.` See `introduction` for
       details about locating elements.
       “””
       self._info(“Selecting frame ‘%s’.” % locator)
       #element = self._element_find(locator, True, True, tag=’frame’)  #注释掉三行无效代码
       #self._info(“%s” % element)
       #self._current_browser().switch_to_frame(element)        
       self._current_browser().switch_to_frame(locator)  #这一行是新加的

修正这个错误后,我们就能正常使用select frame关键字了。

假设你要测试的页面代码如下:

<Iframe src=“innerFrame.html”id=”innerFrame”;width=“250” height=“200” scrolling=“no” frameborder=“0”></iframe> 

innerFrame.html的代码为:

<html>  

    <head>  

         <title>innerFrame</title>  

    </head>  

    <body>  

         <input id “input”></input>  

    </body>  

</html>  

 

如果想在innerFrame的输入域input进行输入,则可以在关键字中如下写:

select frame    innerFrame

input text      input       你想输入的内容。

想返回父Frame的话,用unselect Frame 这个关键字(unselect frame 直接返回顶层,多层frame调用的话还得用id选)。

参考了2篇文章:

http://sbiigu.iteye.com/blog/195612  这篇对iframe的原理写得不错。

http://lzkyo.iteye.com/blog/446186   这篇代码很全

使用远程接口库进一步扩展Robot Framework的测试能力

原文地址:http://blog.sina.com.cn/s/blog_654c6ec70101044p.html

引言:

Robot Framework的四层结构已经极大的提高了它的扩展性。我们可以使用它丰富的扩展库来完成大部分测试工作。可是碰到下面两种情况,仅靠四层结构就不好使了:

1.有些复杂的测试可能跨越多个物理机器,且有的测试库也必须部署在被测系统上。

2.一个测试要使用多个库,但是有的只能用jybot运行,有的只能用pybot运行(这种情况很常见)。

远程库接口的原理:

为了解决上述两个难题,Robot Framework提供了远程库接口技术(remote library interface)。

什么是远程库接口技术呢?其实很简单,远程库接口就是把原来的测试库变成了三部分

 一部分我们可以叫他远程库(Remote Library),第二部分叫做远程服务器(Remote Server),第三部分是真正的测试库(Test Library)。 测试库提供真正的测试功能,它被远程服务器包裹起来,通过XML-RPC协议被远程库访问(见下图)。它的实现思路说白了就是设计模式中的Proxy模式。

 

 

 使用远程接口库进一步扩展Robot <wbr>Framework的测试能力

这样做的好处显而易见。远程库只要遵守XML-RPC协议就可以访问远程服务器,远程服务器的实现方式是什么就无关紧要了,这就意味着我们可以使用任何支持XML-RPC的高级语言为RF写扩展库了,查了查资料,几乎所有的高级语言都支持这个古老的简单协议。

使用远程接口库:

如上文所说,RF把原来的测试库分成了远程库、远程服务器、测试库三部分。那么怎样才能把原有的测试库进行改造呢?我们首先得有个Server。目前RF 提供了Python,Ruby,.Net,Java,Perl和Clojure的Server。在这个链接可以下载它们:

http://code.google.com/p/robotframework/wiki/RemoteLibrary

下载到远程服务器后进行包裹工作,然后在RF调用远程库。

下面我使用Python例子来详细说明如何使用远程库。

Ø  下载Server

Python的server实现的非常简单,只有一个文件,几kb大小。

我们可以在这个网址下载它:

http://robotframework.googlecode.com/hg/tools/remoteserver/robotremoteserver.py

Ø  改造测试库

有人会问,不是用proxy模式么?为什么要改造测试库?不是应该改造做proxy的server么?

其实改造谁都行。但是python有一个非常好的特性就是能够根据是直接被调用或者间接被调用动态决定行为。我们利用这一点,就能改造已有的测试库,使它同时能够当做本地库,也能被远程调用。

拿Robotframework的内建String库为例:

首先我们将robotremoteserver.py拷贝到String.py同一目录下,然后打开String库的源代码并在最后加入下面代码:

 

if __name__ == ‘__main__’:

    import sys

    from robotremoteserver import RobotRemoteServer

    RobotRemoteServer(String(), *sys.argv[1:])

 

保存。然后一个远程服务器包裹的String库就好了。

分析一下代码,我们只是实例化了一个远程服务器,并且将String类作为参数传了进去。

其实我们在这里还能设置远程服务器IP和端口号。

if __name__ == ‘__main__’:

    import sys

    from robotremoteserver import RobotRemoteServer

    RobotRemoteServer(String(),’172.22.xx.xx’,’8081’ *sys.argv[1:])

 

如果不设置,也可以在运行这个Server的时候设置。

Ø  运行远程库

在命令行模式进入String.py所在的目录,执行

String.py  172.22.22.42  8081

这时候RF就会告诉你一个包裹着测试库的远程服务器已经被启动了。

Ø  在RF中调用远程库

首先我们要引用Remote Library,引用后就能直接使用了,跟使用本地库没有任何区别。

下面是测试远程String库的脚本。

*** Settings ***

Library           Remote    172.22.22.42:8081    WITH NAME    RString

*** Test Cases ***

TestFetch

   ${str}    Fetchfromleft    I love test    5

脚本中引用了刚才我们建立的远程库,所有远程库的名称都叫做Remote,不同的只是后面的ip地址和端口号,我们也可用WITH NAME 关键字给它起一个别名,这是为了解决多个远程库里有相同关键字的问题(可以使用关键字前加命名空间的方式加以区分)

下面链接是其它高级语言实现的远程库接口的说明,由于原理相似,就不再一一说明了。

JAVA:  http://code.google.com/p/jrobotremoteserver/

Perl:  http://code.google.com/p/plrobotremoteserver/

.NET:   http://code.google.com/p/sharprobotremoteserver/

小结:

利用远程库接口技术,我们几乎可以把所有提供接口的测试工具都粘合起来,外边报个皮就行了。我们也可以用各种高级语言写测试库了。不过值得说明的是,有些 server还不完善,比如Java远程库接口就不能正确的传递Exception,猜测是一些复杂对象不好通过XML-RPC协议进行序列化,感觉这个 可以再包一层皮:)

Robot Framework的数据库扩展库2.0出来了(Java版本)

原文地址:http://blog.sina.com.cn/s/blog_654c6ec70100zqv7.html

DataBaseLibrary出来了,增添了一些关键字,并且支持了Remobte方式 (还没有仔细研究)

对比了一下1.0和2.0的关键字,进步不是很大。关键还是不够灵活,比如连表查询,多段数据返回,还是支持的不好。前一段被迫自己扩展了一下:允许自定义SQL,并使用Json格式模拟DataSet的返回,这样就能基本满足一般需要了。它还需要3.0吼吼。

 

贴一下DataBase2.0的地址,有兴趣的同学可以看一下。

发布程序的blog:http://blog.codecentric.de/en/2012/02/database-library-2-0-for-the-robot-framework/

 

在Github上的项目地址:https://github.com/ThomasJaspers/robotframework-dblibrary

 

关键字文档:http://thomasjaspers.github.com/robotframework-dblibrary/DatabaseLibrary_v20.html