hudk 2012-09-25
OperDriver
OperaDriver是WebDriver厂商OperaSoftware和志愿者开发了对于Opera的WebDriver实现。
OperaDriver可以驱动浏览器对您的网页运行不通的测试,就像真实用于一样在他们之间导航。他可以模仿象点击链接,输入文字,提交表单的动作,并把结果报告给您,这样你就知道网站是否象您希望的那样工作。
OperaDriver的终端用户模拟确保了你的整个堆栈(HTML、脚本、样式嵌入资源和后端设置)是正常的,并且没有繁琐的手工测试例程。
要求
您需要JRE1.5(Oracle或OpenJDK)或以上来使用OperaDriver。它使用Scopeinterface(与Dragonfly一样)来直接在Java中与Opera直接通讯。所以,他和Opera11.6级以上的版本兼容,虽然他和老的版本做一些调整也可勉强使用。
OperaDriverServer期望你安装了Opera或者OperaNext在每个系统的缺省路径:
OSExpectedLocationofOpera
GNU/Linux/usr/bin/opera
/usr/bin/opera-next
/usr/bin/operamobile
Mac/Applications/Opera.app/Contents/MacOS/Opera
/Applications/OperaNext.app/Contents/MacOS/Opera
/Applications/OperaMobileEmulator.app/Contents/Resources/OperaMobile.app/Contents/MacOS/operamobile
Windows%PROGRAMFILES%\Opera\opera.exe
%PROGRAMFILES%\OperaNext\opera.exe
%PROGRAMFILES%\OperaMobileEmulator\OperaMobileEmu.exe
你也可以通过opera.binary的capability设置或者环境变量OPERA_PATH来更改该路径。可以在AdvancedUsage中得到更多关于OperaDriver配置的信息。
11.52或更低版本的OperaDriver
在低于11.52版本的Opera中使用OperaDriver,请确保opera.port的capabilites值为-1,opera.profile的值为””(空字符串)来禁用-debugproxy和-pd这些在老版本中不支持的命令行参数。对于更老的版本(11.01或者更老)你可能需要使用脚本的包装:(见下面)
开始
远程
去安装请去下载页面下载selenium-server-standalone或selenium-server,确保你有一个相当最近版本的Opera安装。你所需要做的就是创建一个WebDriver实例:
WebDriverdriver=newOperaDriver();
driver.navigate().to("http://opera.com/");
WebDriver提供了多个语言的API,你可以在Ruby中做同样的事,通过设置环境变量“SELENIUM_SERVER_JAR”为*selenium-server-standaloneJAR的全路径。
exportSELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar
然后在Ruby中:
require'selenium-webdriver'
driver=Selenium::WebDriver.forpera
driver.navigate.to'http://opera.com/'
在Python中:
fromseleniumimportwebdriver
driver=webdriver.Opera()
driver.get('http://opera.com/')
把Server作为一个单独进程运行
OperaDriver与任何一个RemoteWebDriver客户端兼容。简单地启动您的服务器,创建一个远程客户端:
WebDriverdriver=newRemoteWebDriver("http://localhost:9515",DesiredCapabilities.opera());
单独的OperaDriver
也可以使用OperaDriver作为您项目的一个单独的依赖。在Githubproject'sdownloadsection下载,解压缩。在examples目录中有一些例子。你自己的项目中,在classpath中includelib目录,例如:
javac-classpath"lib/*:."Example.java
在Eclipse中,可在Project>Properties>JavaBuildPath中”AddJARs…”或者”AddExternalJARs…”取决于您项目布局。
也可以使用Maven,groupid是com.opera,artifactID是operadriver。
文档
高级使用
Capabilities:
您可以使用DesiredCapabilities类来制定OperaDriver的设置。支持的capabilities有:
CapabilityTypeDefaultDescription
opera.logging.levelString/Level
Level.INFO日志的详细级别SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST,ALL.
opera.logging.fileStringnull日志的文件默认是不写到文件中.
opera.binaryStringsystemOperabinaryOperabinary的绝对路径.如果没有指定,是安装路径。
opera.arguments*Stringnull传给Opera的参数,以空格分隔。参看Opera-help
opera.hostString"127.0.0.1"Opera需要链接的Host。除非Opera在别的机器,否则不需要使用。
opera.portIntegerrandomportOpera连接的端口.0=随机端口,-1=Opera默认(port7001)(forusewithOpera<12).
opera.launcherString~/.launcher/LAUNCHERlauncherbinary的绝对路径.Launcher是OperaDriver和Opera浏览器之间的一个网关,用来控制和监视binary,截屏。默认使用OperaDriver提供的Launcher
opera.profileString/OperaProfileOperaProfileOpera使用的profile的目录.空是指一个新的随机Profile.如果"",空字符串,那么默认的autotest目录将会使用.
opera.idleBooleanfalse是否使用Opera的imlpementation.它将使用一个浏览器内置的启发式猜测页面何时完成加载,默认禁止。
opera.displayIntegernull使用的X显示,通常为Xvfb或者tightvncserver.(UNIX-likeOSes.)
opera.autostartBooleantrue是否自动启动Operabinary.如果false,OperaDriver会等待浏览器的连接.到"opera:debug",输入正确的端口点"Connect"手动连接。
opera.no_restartBooleanfalse是否重启.
opera.no_quitBooleanfalse当OperaDriver关闭时是否退出Opera.如果启动,不退出
opera.productStringnull我们使用的产品如"desktop","core-desktop"或"sdk".SeeOperaProduct
使用capabilities:
DesiredCapabilitiescapabilities=DesiredCapabilities.opera();
capabilities.setCapability("opera.profile",newOperaProfile("/path/to/existing/profile"));
capabilities.setCapability("opera.logging.level",Level.CONFIG);
capabilities.setCapability("opera.logging.file","/var/log/operadriver.log");
capabilities.setCapability("opera.display",;
//Nowuseit
WebDriverdriver=newOperaDriver(capabilities);
driver.navigate().to("http://opera.com/");
定制Profile
您也可以指定一个Opera使用的profile。您可以使用一个新的随机的Profile(默认的)或者指定一个系统的Profile。您可以在Opera启动之前操作Profile,例如,设置您想要的Preferences。
OperaProfileprofile=newOperaProfile();//fresh,randomprofile
profile.preferences().set("UserPrefs","IgnoreUnrequestedPopups",false);
DesiredCapabilitiescapabilities=DesiredCapabilities.opera();
capabilities.setCapability("opera.profile",profile);
WebDriverdriver=newOperaDriver(capabilities);
环境变量
为了制定opera安装路径和命令行参数,您需要使用环境变量。下表是您可以使用的环境变量:
NameDescription
OPERA_PATHTheabsolutepathtotheOperabinaryyouwanttouse.IfnotsetOperaDriverwilltrytolocateOperaonyoursystem.
OPERA_ARGSAspace-delimitedlistofargumentstopassontoOpera,e.g.-nowindow,-dimensions1600x1200,&c.Seeopera-helptoviewavailablearguments.
OPERA_PRODUCTTooverridetheproductcheckwhenrunningtheOperaDrivertests.
如何设置环境变量,
GNU/Linux和Mac:exportOPERA_PATH=…,添加这行到~/.bashrc(或者您的Shell的配置文件)来使用后面章节的特性。
Windows:请参考http://support.microsoft.com/kb/310519
支持的Opera版本:
DeskTop
这是OperaDriver支持的官方OperaDesktop版本:
VersionWorkaround/tweaksneeded
12.00(Notreleasedyet)
11.62
11.61
11.60
11.52Setopera.portto-1andopera.profileto""(emptystring)todisable-debugproxyand-pdcommand-linearguments
11.51
11.50
11.51
11.11
11.10
11.01-autotestmodecommand-lineargumentisnotsupported,useawrapperscript
11.00
Wrapperscript
一些老的版本默认不支持-autotestmode,-debugproxy和-pd等参数,您可以通过创建一个wrapperscript绕过这些问题,把capabilityopera.binary执行它的绝对路径。
#!/bin/sh
#Wrappertopreventthe-autotestmodeargumentreachingthisversionofOpera
#whichdoesn'tsupportit.
`dirname$0`/opera
已知问题:
ModiferKey的状态不能在Actions的多个.sendkeys调用中保持。
启用IME特性的Opera的问题(OperaMobile,Android)
不支持OperaMini。
不支持javascript报警弹出框。
getScreenshotAs()只返回当前视区的图像,其他图像为空白。
在windowsvista和win7,当Opera11.5安装在默认路径时,需要管理员权限。
不可以移动到链接中的图片。
在视区中来回移动鼠标坐标有问题。
多字节输入在Windows中会失败。
双击一个元素时,EcmaScriptdbClick事件没有被触发。
在Mac中Opera需要全部的焦点。