[大坑缓填]SeleniumRC+BlueDuck,用AU3实现全浏览器的自动化控制及自动化测试
本帖最后由 大绯狼 于 2012-4-29 09:55 编辑在群里看见很多朋友都在问怎么用AU3去控制firefox或者是更方便的控制IE,同理CHROME之类的浏览器也应该在需求范围内。
因此一直想写一个相关的教程,暂定以selenium为例,讲解如何用同一套代码进行跨浏览器的自动化控制(测试)。
由于最近忙的要疯,因此这个坑先挖着,不指定什么时候更新。
开始准备
---------------------------------
目前就自动化测试方面来说,对WEB页面的控制有一个比较流行的工具是Selenium,该工具基于Java,目前官方能支持JAVA、C#、Ruby、Pyhton等语言。最重要的是,该工具不需要依赖任何浏览器,其代码可以在各种主流浏览器中使用。
由于该工具的实现原理(原理部分暂不解释,后面给出地址大家自行参考)决定其并不需要依赖于语言(只是面向对象语言能更具优势),因此我们可以直接使用AU3来对其进行编程控制。
Selenium的优势:
1、支持绝大部分主流浏览器,楼下说的遨游,其实也就是IE和WEBKIT内核,就测试方面来说和使用IE及CHROME并没有多大区别。
2、可以使用CSS Selector和XPath定位元素,可以达到100%精确,不管这个页面有多复杂。不会像IE.AU3那样的基础元素查找方法会出现找不对元素的情况。当然,这是需要额外学习的。
3、换浏览器仅仅需要改变及其少量的代码(基本上就一行)即可实现。
4、在FF浏览器中,SeleniumRC有录制操作过程的插件,当然,目前不支持AU3,可以考虑自己写转化脚本。
5、并不一定要在本机才能执行,SeleniumRC可以配置在远程端也可以进行自动控制。
暂时就这么多,想到了再来添加。
本来准备自己写个SeleniumRC的UDF的,但是网上闲逛的时候意外的发现有国外的同志已经写好了,名字叫BlueDuck,因此我们就直接拿来用吧~
另注:想要更好更方便的控制Selenium,可以使用面向对象语言(JAVA、C#、Ruby、Python)结合Selenium WebDriver,具体下载地址请参考下面的官网下载页。
下面是一些参考资料及工具下载的地址(整理好后我会上传一个,大家先将就去自行下载一下):
Selenium官网
http://seleniumhq.org/
Selenium下载页面(这里我们需要使用到Selenium Server ,就是Selenium RC,由于是最近改的名称,我下面的教程依然用Selenium RC这个名称)
http://seleniumhq.org/download/
BlueDuck AutoIt driver for Selenium
http://sourceforge.net/projects/blueducksda/
BlueDuck Selenium Remote Control(非必须,一个selenium的配置工具,喜欢的朋友可以下来研究下,我也是刚发现有这玩意儿)
http://sourceforge.net/projects/blueducksrc/
我们还需要用到的是JDK(JAVA编写的程序,木有办法)
http://www.oracle.com/technetwor ... ownloads/index.html
Selenium是什么
偷个懒,给个百度百科
http://baike.baidu.com/view/478050.htm
Selenium私房菜(很不错的介绍+入门教程),当然我们主要关注Selenium RC。
http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html
下载好需要的工具,大概看了一下相关的资料,我们就可以开始准备环境了:
1、 安装好BlueDuck AutoIt driver for Selenium(这个不用我教吧)
2、 安装JDK,启动Selenium RC
运行: java -jar selenium-server-standalone.jar
一个简单的脚本
---------------------------------
由于BlueDuck设计上的思路,是把页面元素的地址存入一个INI文件中,然后在脚本里当做元素去调用,因此,我们首先需要一个包含页面元素的INI文件,文件名为SimpleTest.ini,注释请自行删除。
;字段名,在脚本里需要指定
;一个input元素,查找元素方法是用css选择器,器相关知识请百度
webInput.input=css=#kw
;一个button元素,查找元素方法为默认xpath,相关知识请百度
webButton.search=//*[@id='su']
;需要包含sda.core这个UDF
#include <../lib/sda.core.au3>
Local $oTest,$oRepo,$Page
;新建一个测试
$oTest = NewTest("Simple Test")
;加载默认的配置
$oTest.Setup()
;NewWebBrowser这个函数在\lib\core\webBrowserClass.au3里,需要在远程端启用SeleniumRC或者想改变浏览器的同学,可以自行参考.
;浏览器模式列表:
; *konqueror
; *firefox:启动Firefox作为测试浏览器
; *iexploreproxy
; *firefoxproxy
; *safari
; *safariproxy
; *iexplore:启动IE作为测试浏览器
; *pifirefox
; *chrome
; *firefox2
; *piiexplore
; *googlechrome
; *iehta:以本地应用程序hta模式测试
; *firefox3
; *mock
; *opera
; *custom
;配置浏览器为FF,默认根路径为百度,FF浏览器可以自定义路径
;
$oTest.NewBrowser('firefox D:\Mozilla Firefox\firefox.exe',"http://www.baidu.com/")
$oTest.Browser.start
;从配置文件读取元素路径信息,文件名为SimpleTest.ini
$oRepo = $oTest.SetRepository("SimpleTest")
;配置文件的字段名(同INI文件结构)
$Page = $oRepo.WebPage("Page.SimpleTest")
;打开浏览器根路径
$Page.open("/")
;最大化窗口
$Page.windowMaximize
;在页面输入框元素input中输入AutoitCN
$Page.input.item("input").type("AutoitCN")
;点击页面按钮元素search
$Page.button.item("search").click
;等待页面出现文字AUTOIT CN ,弹出提示信息
If $Page.WaitForText("AUTOIT CN") = 1 Then
MsgBox(64,"提示","页面加载完成")
EndIf
;关闭浏览器
$oTest.Browser.stop
---------------------懒人分割线------------------------------
今天就先更新这么多,还需要继续加班。关注情况好的话,会常来更新的。
今后有空了会更新一些例子及更高级的使用方法,计划会将JQuery的Sizzle选择器加入元素查找中。
另外,由于selenium是控制浏览器的方法是基于JS的,因此不能对本地文件及程序进行控制,这在配置SeleniumRC到远程端的时候会很不方便(如上传文件,控制关闭IE进程等操作selenium是实现不了的),我有为SeleniumRC写一个HTTP服务器外壳(AU3写的),这样就可以把浏览器控制与本地文件程序控制结合起来,将来有机会会一起更新上来。
目前大家先自己找资料看看吧,相关的方法请参考SeleniumRC API或者自行分析UDF文件。 没看到我喜欢的遨游浏览器在列表中, 心有点凉啊 好东西啊 代码很好看 顶起先!!!! 我也占个坑。下次继续看。 占个坑。下次继续看。 貌似不错,先留名 谢谢楼主。。。 LZ哇,懒人分割线后面的内容,你还没写呢 坐等更新!~~~~~~~~ 更新哦。。。 了解学习。 实在没有看出这样做的必要? 很不错的教程,楼主看到你这两天上来了,赶紧过来填坑啊。 本帖最后由 kirk_xie 于 2013-7-31 11:10 编辑
好帖子 我是个新手 有个地方不明白 为什么core目录里面有pageClass.au3和pageObject.au3两个文件,而且还定义了相同的函数NewPage() 不会有冲突吗?;Title: pageClass.au3
;
;License:
; This script is distributed under the GNU General Public License 3.
;
;Author:
; BlueDuck Team | contact@blueducktesting.com | <http://blueducktesting.com>
;
;Description:
;Support for Page model,Page model is a pattern that maps a UI page to a class.
#Region Page Class
Global $oPage = NewPage()
Func NewPage()
Local $oClassObject = _AutoItObject_Class()
$oClassObject.Create()
;Methods
With $oClassObject
.AddMethod("setDataProvider", "_wrapper_setDataProvider")
EndWith
;Property
With $oClassObject
.AddProperty("url", $ELSCOPE_PUBLIC, "")
.AddProperty("result",$ELSCOPE_PUBLIC, 0)
.AddProperty("resultDescription", $ELSCOPE_PUBLIC, "")
EndWith
Return $oClassObject.object
EndFunc ;==>NewPage
#EndRegion Page Class;Title: pageObject.au3
;
;License:
; This script is distributed under the GNU General Public License 3.
;
;Author:
; BlueDuck Team | contact@blueducktesting.com | <http://blueducktesting.com>
;
;Description:
;Support for PageObjects pattern
#Region Page Class
Global $oPage = NewPage()
Func NewPage()
Local $oClassObject = _AutoItObject_Class()
$oClassObject.Create()
;Property
With $oClassObject
.AddProperty("url", $ELSCOPE_PUBLIC, "")
.AddProperty("result",$ELSCOPE_PUBLIC, 0)
.AddProperty("resultDescription", $ELSCOPE_PUBLIC, "")
EndWith
Return $oClassObject.object
EndFunc ;==>NewPage
#EndRegion Page Class 上个星期接触了selenium,自己写JAVA代码调用的,很强大。控制谷歌、FF浏览器,自动修改了一千多个apple id,非常过瘾。然后来论坛看看有木有相关的AU3代码,发现还真有,楼主真是有心了。
页:
[1]
2