大绯狼 发表于 2012-4-28 20:09:42

[大坑缓填]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文件。

user3000 发表于 2012-4-28 20:21:59

没看到我喜欢的遨游浏览器在列表中, 心有点凉啊

komaau3 发表于 2012-4-28 20:33:01

好东西啊 代码很好看 顶起先!!!!

hjwahjl 发表于 2012-5-7 15:28:48

我也占个坑。下次继续看。

whitehead 发表于 2012-5-7 20:38:01

占个坑。下次继续看。

ojoojo 发表于 2012-5-12 16:57:17

貌似不错,先留名

icydia 发表于 2012-8-5 20:54:32

谢谢楼主。。。

Amei595409929 发表于 2012-8-22 17:02:53

LZ哇,懒人分割线后面的内容,你还没写呢

heavenm 发表于 2012-8-22 19:19:00

坐等更新!~~~~~~~~

shil1 发表于 2012-10-13 11:28:11

更新哦。。。

fanxiang_1984 发表于 2012-10-24 13:45:02

了解学习。

yb980 发表于 2012-10-30 22:23:43

实在没有看出这样做的必要?

pc123 发表于 2013-6-29 07:38:11

很不错的教程,楼主看到你这两天上来了,赶紧过来填坑啊。

kirk_xie 发表于 2013-7-31 11:08:49

本帖最后由 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

chamlien 发表于 2017-9-25 14:32:18

上个星期接触了selenium,自己写JAVA代码调用的,很强大。控制谷歌、FF浏览器,自动修改了一千多个apple id,非常过瘾。然后来论坛看看有木有相关的AU3代码,发现还真有,楼主真是有心了。
页: [1] 2
查看完整版本: [大坑缓填]SeleniumRC+BlueDuck,用AU3实现全浏览器的自动化控制及自动化测试