From: http://blog.csdn.net/planisnothing/article/details/7252955
处理HTTPS和弹出窗口安全
许多应用程序从HTTP切换到HTTPS,当它们需要发送加密的信息诸如密码或信用卡信息。这对今天的Web应用程序来说的是共同的。Selenium RC支持这个。
为确保HTTPS站点的真实,浏览器需要一个安全证书。否则,当浏览器使用HTTPS存取AUT时,它将假定应用程序是不可信任的。当如此时,浏览器将显示一个安全弹出窗口,这些弹出窗口不能使用Selenium RC关闭。
当在Selenium RC测试中处理HTTPS时,必须使用支持的运行模式,并为你处理安全证书。你需要在你的测试程序初始化Selenium时,指定该运行模式。
在Selenium RC 1.0 beta 2以及以后的版本为此运行模式使用*firefox或*iexplore。在早期的版本,包括Selenium RC 1.0 beta 1,使用*chrome或*iehta。使用这些运行模式,你可以不安装任何特定的安全证书;Selenium RC将为你处理这个。
在版本1.0,推荐运行模式*firefox或*iexplore。然而,有附加的*iexploreproxy和*firefoxproxy运行模式。这些仅仅是为了提供向后的兼容性,除非遗留的测试程序需要,不应该使用。它们有安全证书处理,以及多窗口运行,如果你的应用程序打开附加的浏览器窗口,的限制。
在早期的Selenium RC版本,*chrome或*iehta是支持HTTPS和处理安全弹出窗口的运行模式。它们被认为是试验模式,尽管它们相当稳定和许多人使用它们。如果你正在使用Selenium 1.0,你不需要也不应该使用这些旧的运行模式。
安全证书的解释
正常情况下,你的浏览器将信任你正在测试的,安装了你拥有的安装证书的应用程序。你可以在浏览器的选项或Internet属性(如果你不知道你的AUT的安全证书,可询问你的系统管理员)中检查它。当Selenium装载你的浏览器时,它会注入代码到浏览器和服务器之间的截获的消息。浏览器现在认为不信任的软件将试图伪装你的应用程序。它通过使用弹出消息警告你。
要回避这个,Selenium RC(再次重申,使用支持的运行模式)会临时地安装它自己的安全证书,到你的客户机器一个浏览器可以存取的位置。这将欺骗浏览器认为它访问的是一个不同于你的AUT的站点,而有效地抑制警告弹出窗口。
另外一个由早期的Selenium版本使用的方法是安装随你的Selenium安装提供的Cybervillians安全证书。然而,大部分的用户不再需要做这个;如果你正运行Selenium RC在代理注入模式,你可能需要显式地安装这个安全证书。
支持附加的浏览器和浏览器配置
Selenium API支持运行在除了Internet Explorer和Mozilla Firefox的多种浏览器。参见SeleniumHG.org的Web站点,查看支持的浏览器类型。此外,当浏览器不直接被支持时,你仍然可以运行Selenium测试,在你选择的浏览器,通过让你的应用程序启动浏览器使用“*custom”模式(也就是说,替代*firefox或*iexplore)。要使用这个,你在API的调用中,传递浏览器可执行文件的路径。这也可以使用交互模式在服务器中完成。
cmd=getNewBrowserSession&1=*custom c:\Program Files\Mozilla Firefox\MyBrowser.exe&2=http://www.google.com使用不同的浏览器配置运行测试
正常地,Selenium RC自动配置浏览器,但如果你使用“*custom”模式启动浏览器,你可以强制Selenium RC启动浏览器使用不同的配置,而不是使用自动配置。
例如,你可以像这样使用一个自定义配置启动Firefox:
注意当以这种方式启动浏览器时,你必须手动配置浏览器使用Selenium服务器做为一个代理。正常地,这仅仅意味着打开你的浏览器首选项,并指定“localhost:4444” 作为一个HTTP代理,但此操作方法可能对不同的浏览器,有根本地区别。详细信息可查阅你的浏览器文档。
Mozilla浏览器可能在如何启动和停止上改变。可能需要设置MOZ_NO_REMOTE环境变量使得Mozilla浏览器行为有更多的可预测性。Unix浏览器应该避免使用shell脚本启动浏览器;通常直接使用二进制可执行文件(如firefox-bin)会更好。
解决公共的问题
在开始使用Selenium RC时,有几个常常遇到的潜在的问题。 我们将在此介绍它们以及它们的解决方案。
不能连接到服务器
当你的测试程序不能连接到Selenium服务器时,Selenium在你的测试程序中抛出一个异常。它会显示这个消息或一个类似的一个:
如果你看见类似于这样的一个消息,确信你已经启动了Selenium服务器。如果已经启动,那么在Selenium客户库和Selenium服务器之间存在一个连接问题。
当开始使用Selenium RC时,大多数人从在相同的机器上运行测试程序(带有Selenium客户端库)和Selenium服务器开始。要完成这个,使用“localhost”作为你的连接参数。我们推荐以这种方式开始,因为它减少使用初期潜在的网络问题的影响。假定你的操作系统有典型的网络和TCP/IP设置,你应该没有多少困难。事实上,许多人选择以这种方式运行测试。
不管怎样,如果你真的想要运行Selenium服务器在远程机器,应该确保在两个机器间有有效的TCP/IP连接。
如果你难以连接,可以使用常用的网络连接工具,如ping,telnet,ifconfig(Unix)/ipconfig(Windows)等等,确保你有有效的网络连接。如果不熟悉这些,你的系统管理员可以帮助你。
不能装载浏览器
好的,不是一个友好的错误消息,很抱歉,但如果Selenium服务器不能装载浏览器你很可能看到这个错误
(500) Internal Server Error这可能是由于
- Firefox(Selenium 1.0)不能启动,因为浏览器已经打开和你没有指定一个不同的配置文件。参见在服务器选项的Firefox配置文件一节。
- 你正在使用的运行模式不匹配在你的机器上的任何浏览器。检查传递给Selenium的参数,当你的程序打开浏览器时。
- 你显式地指定了浏览器的路径(使用“*custom” - 见上文),但路径是不正确的。检查和确保路径是正确的。同样查看Selenium用户组确信你的浏览器和“*custom”参数没有已知的问题。
Selenium不能找到AUT
如果你的测试程序成功地启动浏览器,但浏览器不显示你正在测试的Web站点,最大的可能原因是你的测试程序没有使用正确的URL。
这可能容易发生。当你使用Selenium-IDE导出你的脚本,它插入一个虚拟的URL。你必须为你测试的应用程序手动改变这个URL到正确的一个。
当准备一个配置文件时,Firefox拒绝关闭
这时常发生在当你运行Selenium RC测试程序在Firefox时,但你已经有一个Firefox浏览器会话在运行,而你在启动Selenium服务器时没有指定一个不同的配置文件。这个来自测试程序的错误看起来像这样:
Error: java.lang.RuntimeException: Firefox refused shutdown while preparing a profile此处是来自服务器的完整错误消息:
16:20:03.919 INFO - Preparing Firefox profile...要解决这个,参见指定一个不同的Firefox配置文件一节。
版本问题
确信你的Selenium版本支持你的浏览器版本。例如,Selenium RC 0.92不支持Firefox3。有时候你可能是幸运的(我就是)。但不要忘记检查你正在使用的Selenium支持哪个浏览器的版本。如果有疑问,使用最新的,带有你的浏览器版本最广泛支持的Selenium发布版本。
Error message: “(Unsupported major.minor version 49.0)” while starting server这个错误说你没有使用正确地Java版本。Selenium服务器需要Java 1.5或更高。
加倍仔细地检查你的Java版本,从命令行运行这个。
java -version你应该看到一个显示Java版本的消息。
java version "1.5.0_07"如果你看到一个较低的版本号,你可能需要更新JRE,或者你可能仅仅需要增加它到你的PATH环境变量。
404 error when running the getNewBrowserSession command如果当你试图打开一个页面在 “http://www.google.com/selenium-server/“而你得到一个404错误,则一定是因为Selenium服务器没有正确地配置做一个代理。"Selenium服务器"目录没有在google.com上;只有当代理被适当地配置时才会存在。代理配置高度依赖于带有*firefox,*iexplore,*opera,或*custom的浏览器是如何启动的。
- *iexplore:如果浏览器启动是使用*iexplore,你可能有一个Internet Explorer代理设置问题。Selenium服务器试图在Internet选项控制面板配置全局代理设置。你必须确信当Selenium服务器启动浏览器时,它们被正确地配置。试着看看你的Internet选项控制面板。点击“连接(Connections)”选项页,然后点击“局域网设置(LAN Settings)”。如果你需要使用一个代理去存取你想要测试的应用程序,你需要启动Selenium服务器用“-Dhttp.proxyHost”;参见代理配置为了更多的详细信息。
- *custom:当使用*custom时,你必须正确地配置代理(手动),否则你会得到一个404错误。加倍检查你的正确配置的代理设置。为了检查是否正确地配置了代理,可以试试故意地错误配置浏览器。试试配置浏览器使用错误的代理服务器宿主或错误的端口。如果你已经成功地错误配置浏览器的代理设置,那么浏览器将不能够连接到Internet,这是一个确信一个人正在正确地调整相关设置的方式 。
- 对其他的浏览器(*firefox,*opera) ,我们自动为你硬编码代理,如此此功能没有已知的问题。如果你遇到404错误,并且已经仔细地遵从用户指南,可以张贴你的结果给Selenium用户组,从用户社区寻求某些帮助。
许可拒绝错误
该错误最常见的原因是你的会话正试图,通过跨域的边界(诸如存取一个页面从http://domain1,然后存取一个页面从http://domain2)或切换协议(从http://domainX移动到https://domainX)违反同源策略。
这个错误也可能发生,当JavScript试图去查找UI对象,那个仍然是不可得到的(先于这个页面已经完成装载),或者不再是可得到的(在页面已经开始卸载)。这最常遇到是在带有几个部分的AJAX页面,或者装载和/或重新装载独立的较大页面的子帧。
错误可能是间歇的。经常不可能用调试器再生这种问题,因为当调试器的负荷增加到系统后,源于竞争条件的问题原因是不可再生的。许可问题被包括在本教程中。请仔细地阅读有关同源策略,代理注入的章节。
处理浏览器弹出窗口
有几种在Selenium测试中得到的“弹出窗口”。你可能不能运行Selenium命令关闭这些弹出窗口,如果它们是由浏览器激发而不是你的AUT。你可能需要知道如何管理它们。每一种类型的弹出窗口有区别地标定。
- HTTP基本验证对话框:这些对话框用于提示登录到站点的用户/密码。要登录到需要HTTP基本验证的站点,在URL中使用用户/口令,正如在RFC1738中的描述,像这样: open(“http://myusername:[email protected]/blah/blah/blah“).
- SSL证书警告:Selenium RC自动试图去伪装SSL证书,当服务器使能做一个代理时;参见HTTPS一节为了更多的信息。如果你的浏览器被正确地配置,你应该永远也不会看到SSL证书警告,但你可能需要配置浏览器信任我们危险的“CyberVillains” SSL证书授权。再次重申,有关如何完成请参考HTTPS一节。
- 模态的JavaScript的alert/confirmation/prompt对话框:Selenium试图隐藏这些对话框(通过替代window.alert,window.confirm和window.prompt),因此它们不会停止你的页面的执行。如果你看到一个alert弹出窗口,可能是因为它是在页面装载过程中激发的,那个通常对我们来说太早,以至于不能保护这个页面。Selenium包含用于断言和验证alert和confirmation弹出窗口的命令。参见在第四章中的有关这些主题的章节。
在Linux,为什么我的FIrefox浏览器会话没有关闭?
在Unix/Linux,你必须直接调用“firefox-bin”,如此确信可执行文件在指定的路径上。如果通过一个shell脚本执行Firefox,当杀死浏览器Selenium RC时,也将杀死shell脚本,留下浏览器继续运行。你可以直接指定firefox-bin的路径,像这样。
cmd=getNewBrowserSession&1=*firefox /usr/local/firefox/firefox-bin&2=http://www.google.comFirefox *chrome使用自定义的配置文件不工作
检查Firefox配置文件文件夹 -> prefs.js -> user_pref(“browser.startup.page”, 0);注释此行像这样: “//user_pref(“browser.startup.page”, 0);” 然后重试。
当正在装载父页面时,装载一个自定义的弹出窗口可以么(例如,先于父页的JavaScript window.onload() 函数运行)?
不可以。Selenium在装载页面时,依赖于解释器去决定窗口名称。这些解释器在捕捉新窗口时工作最佳,如果这些窗口被装载在onload()函数之后。Selenium不可能识别在onload()函数之前装载的窗口。
验证命令的问题
如果你从Selenium-IDE导出你的测试,你可能发现你从测试得到空的验证字符串(依赖于你使用的编程语言)。
注释:本节还没有开发。
Safari和MultiWindow模式
注释:本节还没有开发。
Firefox在Linux
在Unix/Linux,1.0以前的Selenium版本需要直接调用“firefox-bin” ,如果你正在使用一个以前的版本,确信真实的可执行文件在指定的路径上。
在大多数的Linux发布中,实际的firefox-bin位于:
/usr/lib/firefox-x.x.x/其中x.x.x是程序的版本号。如此要增加路径到用户搜索路径,你必须增加下面的到你的.bashrc文件:
如果需要,你可以直接指定firefox-bin的路径到你的测试中,像这样:
"*firefox /usr/lib/firefox-x.x.x/firefox-bin"IE和样式属性
如果你正运行测试在Internet Explorer,你不能定位元素使用样式属性。例如:
//td[@style="background-color:yellow"]在Firefox,Opera或Safari,这会工作完美的,但在IE不行。IE按大写字母解释在@style中的关键字。因此,即使源代码是小写,你也应该使用:
//td[@style="BACKGROUND-COLOR:yellow"]如果你的测试打算工作在多个浏览器中,这是一个问题,但你可以容易地编码你的测试去检测这种情况,并试图替代这个仅工作在IE的定位器。
Error encountered - “Cannot convert object to primitive value” with shut down of *googlechrome browser要避免这个错误,你必须启动浏览器带有一个无效同源策略检查的选项。
selenium.start("commandLineFlags=--disable-web-security");在那里我可以询问在这里没有回答的问题的?
试一下我们的用户组。