正如你可以看到Selenium项目的简史,Selenium RC的Selenium很长一段时间的主要项目,前WebDriver /Selenium合并带来的Selenium 2,最新的和更强大的工具。
Selenium 1仍积极支持(大护模式),并提供一些功能,可能无法在Selenium2一段时间,包括支持多国语言的Java,JavaScript,红宝石,PHP,Python中的Perl和C#中和支持几乎所有的浏览器有。
Selenium RC的工程
首先,我们将介绍Selenium RC的组件如何操作和作用,在各次运行测试脚本。 RC元件
Selenium RC的组成部分是:
Selenium服务器启动并杀死的浏览器,解释和执行Selenese命令通过
测试程序,并作为HTTP代理行为,通过浏览器和奥克兰之间的HTTP消息的拦截和验证。
客户端库提供了每种编程语言和Selenium RC服务器之间的接口。
下面是一个简化的架构图....
该图显示了客户端库的沟通与传递Selenium命令执行每个服务器。然后服务器通过Selenium命令到浏览器使用含Selenium核心JavaScript命令。浏览器,使用它的JavaScript解释器,执行Selenium命令。这将运行Selenese的行动或验证您在您的测试脚本中指定。 Selenium服务器
Selenium服务器接收Selenium命令,从你的测试程序,解释他们,回报你的程序运行这些测试的结果。
RC服务器捆绑Selenium核心,并自动注入到浏览器。发生这种情况时,你的测试程序打开浏览器(使用一个客户端库的API函数)。Selenium的核心是一个JavaScript程序,实际上是一组JavaScript函数的解释和执行Selenese命令使用浏览器内置的JavaScript解释。
服务器接收Selenese命令,从你的测试程序,使用简单的HTTP GET / POST请求。这意味着你可以使用任何编程语言,可以发送HTTP请求来自动化Selenium测试。
客户端库
客户端库提供的编程支持,允许你运行Selenium命令,从自己的设计方案。是为每个受支持的语言有不同的客户端库。Selenium客户库提供了一种编程接口(API),即一组功能,从你自己的程序运行Selenium命令。在每个接口,是一种编程功能,支持每个Selenese命令。
客户端库需要Selenese命令,并通过它来处理具体的行动或测试下测试对应用程序(AUT)Selenium服务器。客户端库也收到该命令的结果,并把它传递回你的程序。您的程序可以接受的结果,并存储到一个程序变量,并报告成功或失败的,或可能采取纠正措施,如果它是一个意外的错误。
因此,要创建一个测试程序,你只要写一个程序,运行一套Selenium命令使用一个客户端库API。可选,如果你已经有一条SeleneseSeleniumIDE中创建的测试脚本,你可以 生成Selenium RC的代码。SeleniumIDE可以转换(使用其导出“菜单项)到一个客户端驱动程序的API函数调用Selenium命令。看到从Selenium-IDE导出RC代码的具体SeleniumIDE章。
安装
安装是相当为Selenium名不副实。Selenium在您所选择的编程语言提供的库。你可以下载他们的下载页面
一旦你选择了使用的语言,你只需:
安装Selenium RC服务器。
建立使用特定语言的客户端驱动程序的编程项目。
安装Selenium服务器
Selenium RC服务器仅仅是一个Java的jar文件(Selenium服务器, 任何测试开始之前,你必须启动服务器。去Selenium区局的网站服务器位于目录,并运行下面的命令行控制台。 Java的罐子Selenium服务器,的 这可以简化创建一个批处理或包含上述命令外壳可执行文件(在Windows和Linux上。SH BAT)。然后建立一个快捷方式在桌面上的可执行文件,只需双击图标启动服务器。 对于服务器来运行,你需要安装Java和PATH环境变量的正确配置,从控制台运行。您可以检查是否有Java的正确安装在控制台上运行以下。 Java的版本 如果你得到一个版本号(需要1.5或更高版本),你准备好开始使用Selenium RC的。 使用Java客户端驱动程序 Selenium的的Java客户从SeleniumHQ的驱动程序zip 下载页面。 jar文件提取SeleniumJava- 打开您想要的Java IDE(Eclipse中,NetBeans中的IntelliJ,NetWeaver的,等等) 创建一个Java项目。 Selenium的Java 添加到您的项目的classpath文件SeleniumJava- 的。罐子。 从Selenium-IDE,导出脚本到一个Java文件,它包含在你的Java项 目,或写在Java Selenium测试使用的SeleniumJava的客户端API。在本章后面介绍的API。您可以使用JUnit或TestNG的运行测试,你可以写你自己的简单的main()程序。在本节后面解释这些概念。 从控制台运行Selenium服务器。 从Java IDE或命令行执行测试。 Java测试项目配置的详细信息,请参阅附录部分 使用Eclipse配置Selenium RC的配置Selenium钢筋混凝土的IntelliJ。 使用Python客户端驱动程序 安装Selenium通过画中画,说明挂钩在SeleniumHQ 下载页面 无论是在Python写Selenium测试或从Selenium-IDE导出脚本到一个python文件。 从控制台运行Selenium服务器 从控制台或你的Python IDE执行测试 关于Python客户端驱动程序配置的详细信息,请参阅附录的 Python客户端驱动程序配置。 使用。NET客户端驱动程序 从SeleniumHQ 下载页面下载Selenium RC的 解压缩文件夹 下载并安装NUnit的(注:可以使用NUnit的,如果你不熟悉但与NUnit,你也可以写一个简单的main()函数来运行测试,但是NUnit的测试引擎测试引擎是非常有用的。。) 打开你想要的。NET IDE(Visual Studio中,SharpDevelop的,MonoDevelop中) 创建一个类库(DLL) 下列DLL添加引用:nmock.dll,nunit.core.dll,NUnit的。framework.dll,ThoughtWorks.Selenium.Core.dll,ThoughtWorks.Selenium.IntegrationTests.dll和ThoughtWorks.Selenium.UnitTests.dll 写在你的Selenium测试。NET语言(C#中,VB.NET),或从 Selenium-IDE导出脚本C#文件,并复制到您刚刚创建的类文件代码。 写你自己的简单main()程序,或您可以在您的项目包括NUnit的运行 测试。在本章稍后解释这些概念。 从控制台运行Selenium服务器 无论是从IDE运行测试,从NUnit的GUI或命令行 对于使用Visual Studio。NET客户端驱动程序配置的具体细节,请参阅附录 。NET客户端驱动程序的配置。 使用Ruby客户端驱动程序 如果你不已经有RubyGems的安装RubyForge的 运行安装Selenium客户端宝石 在你的测试脚本的顶部,添加要求 “Selenium/客户端” 写测试脚本使用任何Ruby测试工具(如测试::单位,迷你::测试或 RSpec的)。 从控制台运行Selenium RC服务器。 以同样的方式,你可以运行任何其他的Ruby脚本,执行测试。 对于Ruby客户端驱动程序的配置的详细信息,请参阅的Selenium客户文件 从Selenese的一个程序 使用Selenium RC的首要任务是转换成一种编程语言,你的Selenese的。在本节中,我们提供了几种不同的语言,具体的例子。 样品测试脚本 让我们先从一个例子Selenese的测试脚本。试想记录以下测试使用Selenium-IDE。 打开 类型 clickAndWait / q btnG SeleniumRC assertTextPresent SeleniumRC结果* 注:此示例将使用谷歌搜索页面http://www.google.com Selenese的代码作为编程 这里是测试脚本出口(通过Selenium IDE)每个受支持的编程语言。如果你有至少一个面向对象编程语言的基本知识,你就会明白如何Selenium运行 Selenese命令,通过阅读这些例子之一。看到在一个特定的语言,例如,选择其中一个按钮。 / **添加JUnit框架到你的classpath,如果已经不存在 这个例子*工作 * / 包 COM 。例如测试; 进口com.thoughtworks.selenium *。 进口的java.util.regex.Pattern ; *Selenium区局“ )); } } 在下一节,我们将解释如何建立一个测试程序,使用生成的代码。 编程测试 现在,我们将说明如何编写您自己的测试,在每个受支持的编程语言使用的例子。基本上有两个任务: 成从Selenium-IDE编程语言生成脚本,可以选择修改结果。 编写一个非常简单的主程序执行生成的代码。 或者,您可以通过像JUnit或TestNG Java或NUnit的测试引擎平台。NET,如果你正在使用这些语言之一。 在这里,我们显示的语言具体的例子。语言特定的API往往从一个到另一个不同,所以你会发现为每一个单独的解释。 Java的 C#中 蟒蛇 红宝石 使用Perl,PHP Java的 对于Java,人们在使用JUnit或TestNG测试引擎。一些开发环境如Eclipse插件通过这些直接的支持。这使得它更容易。教学JUnit或TestNG是超出了本文档的范围,但是材料可在网上找到有提供出版物。如果您已经是“Java的店”的机会是你的开发已经有一些经验,这些测试框架之一。 你可能会想重命名“NewTest”改为测试类,你自己选择的东西。此外,您将需要在声明中改变了浏览器打开参数: Selenium=新DefaultSelenium (“localhost”的,4444 “* iehta” ,“http://www.google.com/” ) ; SeleniumIDE生成的代码会是这个样子。这个例子注释手动添加额外的清晰度。 封装 COM 。例子。测试; / /指定我们的测试包 进口com.thoughtworks.selenium * ; / /这是司机的进口。你会使用这个实例化 / /浏览器,使它成为你所需要的。 进口的java.util.regex.Pattern ; / /SeleniumIDE添加的模块,因为它有时用于模式 。您可以删除模块,如果它在你不使用 / /脚本。 公共类NewTest,延伸 SeleneseTestCase { / /我们创建我们的Selenium测试用例 公共无效的setUp ()抛出 异常 { 设置(“http://www.google.com/” ,“火狐” ); / /实例化和启动浏览器 } “公共的无效testNew ()抛出 异常 { Selenium。开放(“/” ); Selenium型(“Q” ,“Selenium *Selenium区局“ )); / /这是真正的考验步骤 } } C#的 与Microsoft.NET。NET客户端驱动程序的工作。它可用于任何类似NUnit的测试的。NET框架或Visual Studio 2005 Team System中。 SeleniumIDE假定您将使用您的测试框架NUnit的。在下面生成的代码,你可以看到这一点。它包括确定为每个测试类的成员函数的作用与相应的NUnit的属性一起使用 NUnit的声明。 你可能会重命名“NewTest”改为测试类,你自己选择的东西。此外,您将需要在声明中改变了浏览器打开参数: Selenium=新DefaultSelenium (“localhost”的,4444 “* iehta” ,“http://www.google.com/” ) ; 生成的代码将类似于此。 你可以用NUnit来管理你的测试执行。或者,你可以写一个简单的main()程序实例测试对象和运行的三种方法中,SetupTest()中,TheNewTest(),反过来TeardownTest()。 Python的 pyunit是使用Python的测试框架。要了解Pyunit参考其官方文档 红宝石 SeleniumIDE生成合理的Ruby,但需要老Selenium宝石的。这是一个问题,因为官方的Ruby驱动Selenium是Selenium的客户端的宝石,老Selenium宝石的。事实上,Selenium宝石甚至不再正在积极发展。 因此,它是明智的更新如下IDE所产生的任何Ruby脚本: 1。1号线,改变要求 “Selenium”,要求 “Selenium/客户端” 2。第11行,改变Selenium:: SeleniumDriver.new到 Selenium::客户:: Driver.new的 你也可能要改变类的名称,东西多信息“无题”,并改变测试方法的名称“test_untitled比其他的东西。” 下面是创建一个简单的例子,通过修改SeleniumIDE生成的Ruby代码,如上所述。 的Perl,PHP的 文档团队成员没有用过Perl或PHP的Selenium RC。如果您正在使用这两种语言之一的Selenium RC,请与文档团队联系(参见上作出贡献的章节)。我们很想从你和你的经验,包括一些例子,以支持Perl和PHP用户。 学习API 在Selenium RC API使用命名约定,假设你理解Selenese的,大部分的接口将是不言自明。然而,在这里,我们解释了最关键的,可能不太明显的方面。 启动浏览器 设置(“http://www.google.com/” ,“火狐” ); 这些例子都打开浏览器,并表示该浏览器的程序变量分配一个“浏览器实例”。然后用这个程序变量调用从浏览器的方法。这些方法执行Selenium命令,即如开放或类型或校验 命令。 创建浏览器实例时需要的参数是: 主持人 指定的服务器所在的计算机的IP地址。通常,这是作为客户端运行的同一台机器,所以在这种情况下,本地主机通过。在一些客户,这是一个可选参数。 端口 指定服务器正在监听等待客户端建立连接的TCP / IP套接字。这也是在某些客户端驱动程序的可选。 浏览器 你想运行测试的浏览器中。这是一个必需的参数。 网址 下测试应用程序的基础URL。这需要所有的客户端库和启动浏览器的代理AUT的沟通是不可或缺的信息。 请注意,一些客户端库需要浏览器开始通过调用其明确的start()方法。 运行命令 一旦你的浏览器初始化,并分配给一个变量(通常命名为“Selenium”),您可以通过各自的方法调用从浏览器中的变量,它运行Selenese命令。例如,调用类型的Selenium对象的方法: selenium.type(“字段ID”,“输入字符串”) 在后台浏览器实际上将执行类型的操作,基本上是相同的用户输入到浏览器,使用的定位和你在方法调用中指定的字符串。 报告结果 Selenium RC的不报告结果有其自身的机制。相反,它允许你建立你的报告,定制您需要使用您选择的编程语言的特点。这是伟大的,但如果你只是想东西快,这已经为你做了吗?往往是现有库或测试框架,可以更快地满足您的需求比开发自己的测试报告码。 测试框架的报告工具 测试框架为许多编程语言提供。这些,连同其执行你的测试提供一个灵活的测试引擎的主要功能,包括报告结果的库代码。例如,Java有两种常用的测试框架JUnit和TestNG。。NET中也有其自己的,NUnit的。 我们不会在这里,自己教的框架,超越本用户指南的范围。我们将简单地介绍有关的功能,随着一些技术可以应用到Selenium的框架。然而,随着互联网上的信息有可以用这些测试框架的好书。 测试报告图书馆 也有专门用于报告测试结果,在您选择的编程语言创建的第三方库。这些经常支持各种如HTML或PDF格式。 最好的办法是什么? 新的测试框架的大多数人将开始与框架的内置报告功能。从那里将检查任何可用的库,因为这是较少的时间比开发自己的消费。当你开始使用Selenium毫无疑问,你会开始把自己的“打印报表”报告进展情况。这可能会逐渐导致你发展自己的报告,可能在并行使用库或测试框架。无论如何,经过初步的,但短期的,学习曲线,你会自然发展自己的情况最好。 试验报告的例子 为了说明这一点,我们将引导您Selenium支持的一些其他语言的一些特定的工具。这里列出的是常用的,并已被广泛用于本指南的作者(因此建议)。 在Java中的测试报告 如果Selenium测试用例的开发使用JUnit然后JUnit的报告可以被用来生成测试报告。请参阅的JUnit的具体报告。 如果Selenium测试用例开发使用TestNG,然后没有外部的任务需要生成测试报告。TestNG的框架生成一个HTML报告,测试的详细列表。见更多TestNG的报告。 ReportNG是一个HTML报告TestNG的框架插件。它旨在作为替代默认TestNG的HTML报告。ReportNG,测试结果提供了一个简单的彩色编码。更多看到ReportNG。 另外,尝试使用TestNG-XSLT的一个很好的总结报告。看起来像这样一个TestNG XSLT报告。 看到TestNG的XSLT更多。 记录Selenese命令 记录Selenium可以用来生成一个伴随着每一个成功或失败的Selenese命令在您的测试报告。测井Selenium扩展Java客户端驱动程序添加Selenese的记录能力。请记录Selenium。 Python的测试报告 当使用Python客户端驱动程序,然后的HTMLTestRunner可以用来生成一个测试报告。看到HTMLTestRunner。 Ruby测试报告 如果RSpec框架用于在Ruby编写Selenium测试用例,那么它的HTML报告可以用来生成一个测试报告。参阅更多RSpec的报告。 注意 如果你感兴趣的语言的日志是怎么回事,来看看Selenium服务器记录 添加一些香料测试 现在我们将使用Selenium RC的原因,将编程逻辑添加到您的测试。这是任何程序相同。使用条件语句和循环控制程序流。此外,您可以使用I / O汇报工作进度信息 在本节中,我们将展示如何编程语言结构,可以与Selenium结合,以解决共同的问题测试的一些例子。 你会发现你的过渡,从简单的测试页面元素的存在动态功能测试,涉及多个Web页面和不同的数据验证预期的结果,你会需要编程逻辑。基本上,SeleniumIDE不支持迭代和标准条件语句。Selenese参数中 嵌入JavaScript的,你可以通过一些条件,但是迭代是不可能的,大多数情况下,将是一种编程语言中要容易得多。此外,您可能需要进行错误恢复的异常处理。对于这些原因和其他人,我们编写了本节说明使用的通用编程技术,给你更大的核查权力“在你的自动化测试。 C#和Java都写在本节中的例子,虽然代码很简单,可以很容易地适应其他语言的支持。如果你有一个面向对象编程语言的一些基本知识,你不应该有困难的理解本节。 迭代 迭代是最常见的人在他们的测试需要做的事情之一。例如,您可能要来多次执行搜索。或者,也许你需要核实您的测试结果来处理“”从数据库返回的结果集。 使用相同的Google搜索例如我们前面使用,让我们的检查Selenium搜索结果“。这个测试可以使用Selenese的: 打开 类型 clickAndWait 类型 clickAndWait 类型 clickAndWait / q btnG q btnG q btnG SeleniumRC SeleniumIDE Selenium电网 assertTextPresent SeleniumRC结果* assertTextPresent Selenium IDE的结果* assertTextPresent Selenium网格结果* 代码已被重复执行相同的步骤3次。但多份相同的代码是不是好方案的做法,因为它更多的工作来维持。通过使用一种编程语言,我们可以遍历一个更加灵活和维护的解决方案的搜索结果。 在C#中: / / String值的集合。 的String [] ARR = { “IDE” , “RC” ,“网格” } ; / /为每个字符串数组'编曲'执行循环。 的foreach (字符串 在 ARR ) { SEL 。开放(“/” ); SEL 。类型(“Q” ,“Selenium” + ); SEL 。点击(“ btnG“ ); SEL 。waitForPageToLoad (“30000” ); assertTrue (“预期的文字:” + + “丢失”页上 , 选择isTextPresent (“Selenium”的结果* + S )); } 条件语句 在测试中使用的条件下,我们先从一个例子来说明。运行Selenium测试时遇到的一个共同问题时,会出现预期的元素不是页。例如,当运行以下行: Selenium。类型(“Q” ,“Selenium” + S ); 如果不是页面上的元素“Q”,则抛出一个异常: COM 。ThoughtWorks的Selenium。SeleniumException :错误: 元 这可能会导致中止测试。对于一些测试,就是你想要的。但往往是不可取的,因为你的测试脚本有许多其他后续测试执行。 更好的办法是先验证元素是否是真的存在,然后采取的替代品时,它不是。让我们来看看在这个使用Java。 / /如果元素是可用页,然后执行操作类型。 (Selenium。isElementPresent (“Q” )){ Selenium型(“Q” ,“Selenium区局” ); } { 系统。出来。输出(“元“+ q + 。“页” ) } 这种方法的优点是继续执行测试,即使一些UI元素不是页。 从测试执行的JavaScript JavaScript的行使Selenium是不能直接支持的应用程序非常方便。的getEvalSeleniumAPI的方法可以用来执行从Selenium RC的JavaScript。 考虑一个应用程序有没有静态标识符“复选框。在这种情况下,人们可以评估从Selenium RC的JavaScript得到所有复选框的ID,然后行使这些权利。 公共静态 字符串[] getAllCheckboxIds (){ 字符串 脚本 = “VAR inputId =新的Array();” ; / /创建数组在Java脚本的 脚本 + = “VAR CNT = 0” / /计数器的复选框ID的。 脚本 + = “VAR inputFields =新的Array();” ; / /创建数组在Java脚本的 脚本 + = “inputFields window.document.getElementsByTagName('输入');” ; / /收集输入元素 脚本 + = “(VAR I = 0; “的&& inputFields [我]的getAttribute('类型')=='复选框'){ / /如果输入字段类型复选框并输入id是不是空 的脚本 + = “inputId [CNT] = inputFields [I] ID;。” + / /保存检查框ID inputId阵列。 “CNT + +;” + 。/ /递增计数器 “}” + 。的if / /端 “}” / /结束 脚本 + = “inputId.toString的();” ; / /转换为字符串的数组。的 String [] checkboxIds = Selenium。getEval (脚本)。(“” ); / /拆分。字符串的 回报 checkboxIds ; } 指望在页面上的图像数: Selenium。getEval (的“window.document.images.length;” ); 请记住在DOM中表达的情况下使用默认Selenium窗口,而不是测试窗口被称为窗口对象。 服务器选项 当服务器启动时,命令行选项可以用来更改默认的服务器行为。 回想一下,服务器开始运行以下。 Java的罐子Selenium服务器,的 如果您的AUT的背后是HTTP代理需要验证,那么你应该配置把http.proxyHost,http.proxyPort,http.proxyUser和http.proxyPassword使用以下命令。 Java的罐子Selenium服务器的 如果您正在使用Selenium1.0,你也许可以跳过这一节,因为多窗口模式是默认的行为。然而,默认情况下,前版本1.0,Selenium跑了一个子帧中的应用程序如下所示,在测试。 一些应用程序没有正常运行在一个子帧,需要被加载到窗口的顶部框架。多窗口模式选项允许AUT的,而不是在默认的框架,然后,它可以有顶部框架,它需要在一个单独的窗口运行。 对于旧版本的Selenium,则必须指定多窗口模式,明确以下选项: - 多窗口 至于SeleniumRC 1.0,如果你想运行测试,在一个单一的框架(即使用较早版本的Selenium标准),就可以说明这一点到Selenium Server使用选项 - singlewindow 指定的Firefox配置文件 Firefox不会同时运行两个实例,除非你为每个实例指定一个单独的配置文件。Selenium RC的1.0和更高版本会自动运行在一个单独的配置文件,所以如果您正在使用Selenium1.0,你也许可以跳过这一节。然而,如果你正在使用旧版本的Selenium,如果你需要使用特定的配置文件为您的测试(如添加HTTPS证书或安装一些插件),您将需要明确指定的个人资料。 首先,创建一个单独的Firefox配置文件,执行此过程。打开Windows的“开始”菜单中,选择“运行”,然后键入并输入下列之一: firefox.exe-profilemanager firefox.exe - P 使用对话框创建新的配置文件。然后,当你运行Selenium服务器,告诉它使用这个新的Firefox配置与服务器的命令行选项 -firefoxProfileTemplate的路径,并指定使用它的文件名和目录路径的轮廓。 firefoxProfileTemplate “配置文件路径” 警告 一定要单独放在一个新文件夹从默认您的个人资料!Firefox的配置文件管理器工具将删除的文件夹中的所有文件,如果您删除的文件,不管他们是否是个人资料的文件或不。 关于Firefox的配置文件的更多信息,可以发现在Mozilla的知识库 运行Selenese的内使用的htmlSuite服务器直接 你可以运行在Selenium服务器Selenese的HTML文件直接通过HTML文件到服务器的命令行。例如: Java的罐子Selenium服务器,的 这将自动启动,你的HTML的套件,运行所有测试,并保存一个不错的HTML报告的结果。 注意 当使用这个选项,服务器将开始测试,并等待一秒钟测试完成指定数量;时间内,如果测试不完整,该命令将退出一个非零退出代码,会产生任何结果文件。 此命令行是很长,所以要小心,当你键入它。注意:这需要你通过在HTML Selenese的套房,而不是一个单一的测试。也意识到 htmlSuite选项是不相容的,互动的, 你不能在同一时间同时运行。 Selenium服务器日志 服务器端日志 当启动Selenium服务器日志选项,可以用来记录宝贵的调试信息报告由Selenium服务器到一个文本文件。 Java的罐子Selenium服务器, 此日志文件是冗长超过标准的控制台日志(包括DEBUG级别的日志消息)。日志文件中还包括记录器的名称,并记录该消息的线程的ID号。例如: 20时44分25秒调试[ 12 ] org.openqa.selenium.server.SeleniumDriverResourceHandler - 开始新的浏览器465828 /顶端frame1张贴 消息格式 TIMESTAMP ( HH:MM:SS )水平[线索]记录仪-消息 此消息可能是多行。 浏览器端日志 在浏览器端的JavaScript(Selenium睿)也记录重要的信息,在许多情况下,这些都可以成为更有用的最终用户比普通的 SeleniumServer日志。要访问浏览器端日志,传递 到Selenium Server - browserSideLog 参数。 Java的罐子Selenium服务器,的 结合-browserSideLog必须日志参数,登录browserSideLogs(以及其他所有DEBUG级别的日志消息)到一个文件。 指定路径到一个特定的浏览器 你可以指定Selenium RC的一个特定的浏览器的路径。这是有用的,如果你有相同的浏览器的不同版本,和你想使用特定。此外,这是用来让你的测试对Selenium区局不直接支持的浏览器运行。当指定的运行模式,使用*定制浏览器的可执行文件的完整路径规范: *自定义 注意 本主题试图解释的Selenium RC背后的技术实现。这不是为 Selenium用户知道这个根本,但了解的一些问题,你可能会发现在未来可能是有用的。 详细了解Selenium RC的服务器如何工作和为什么它使用代理注入和提高权限模式,你必须先了解同根同源。 同根同源 Selenium面临的主要是一脉相承的。这个安全被应用在市场的每一个浏览器,它的目标是,以确保网站的内容将永远是从另一个站点的脚本访问。同根同源的规定,在浏览器中加载任何代码只能运行在该网站的域名。它不能执行在另一网站的功能。因此,例如,如果浏览器中加载JavaScript代码,当它加载www.mysite.com,它不能运行www.mysite2.com甚至装入的代码,如果这是您的另一网站。如果这是可能的,你打开任何网站上放置了一个脚本将能够读取您的银行帐户信息,如果您有其他选项卡上打开帐户页面。这就是所谓的XSS(跨站点脚本)。 若要在此,Selenium的核心(和其JavaScript命令,使所有魔术发生)必须放置在应用测试(相同的URL)相同的起源。 从历史上看,Selenium核心这个问题是有限的,因为它是用 JavaScript实现。Selenium RC是没有,不过,同一原产地的。Selenium作为代理服务器的使用,避免了这个问题。从本质上讲,它告诉浏览器,在浏览器上的一个“欺骗”网站提供服务器的工作。 注意 你可以找到关于维基百科的网页上关于这个主题的更多信息同源策略和XSS攻击。 代理注入 第一种方法使用,以避免同样的原产地的Selenium是代理注入。在代理注入模式,Selenium服务器作为客户端配置HTTP代理[1] [2] ,所测试应用程序和浏览器之间的坐镇。然后口罩AUT的下一个虚构的URL(嵌入Selenium的核心和测试集,并提供他们,好像他们是从同一产地的到来)。 代理是在中间的第三人之间传递两部分球。它作为一个“Web服务[1]器”,提供给浏览器的奥克兰。作为一个代理给Selenium服务器 的“说谎”关于奥克兰的真实URL的能力。 浏览器推出的个人资料,设置本地主机配置:HTTP代理4444,[2]这是为什么任何HTTP请求,浏览器将通过Selenium服务器和响 应将通过它,而不是从真实服务器。 下面是一个建筑图。 作为一个测试套件,在您最喜爱的语言开始,出现以下情况: 1. 客户机/驱动器建立了一个与SeleniumRC服务器的连接。 2. Selenium RC服务器启动浏览器(或重用一个老),Selenium 核心的JavaScript注入到浏览器加载网页的URL。 3. 客户端驱动程序传递到服务器的Selenese命令。 4. 服务器解释命令,然后触发相应的JavaScript在浏览器内执行 该命令的执行。 5. Selenium的核心指示浏览器,第一个指令行事,通常是开放的 AUT页。 6. 浏览器接收开放的要求,并要求从Selenium RC服务器设置为 浏览器使用HTTP代理的网站的内容。 7. Selenium RC服务器要求的页面与Web服务器进行通信,一 旦它接受它,它的页面发送到浏览器屏蔽的起源看起来像页面来自同一服务器为核心Selenium(允许Selenium核心遵守同一原产地)。 8. 浏览器接收到的网页,并在为它预留的框架/窗口呈现。 高度的浏览器 这种方法的工作流程是代理注入非常类似,但主要区别在于,浏览器是在一个特殊的模式称为推出更高权限,使网站做是不常用(因为这样做的事情允许XSS,或填充文件上传输入和漂亮的Selenium有用的东西)。Selenium的核心是通过使用这些浏览器模式,可以直接打开奥克兰和其内容,而不必通过整个奥克兰Selenium RC服务器的读/互动。 这里是建筑图。 作为一个测试套件,在您最喜爱的语言开始,出现以下情况: 1. 客户机/驱动器建立了一个与SeleniumRC服务器的连接。 2. Selenium RC服务器启动一个浏览器的URL(或重用一个老), 将加载在网页Selenium核心。 3. Selenium的核心是从客户机/驱动器(通过另一个HTTP请求 向Selenium RC服务器)的第一条指令。 4. Selenium的核心作用,第一个指令,通常开放AUT的页面。 5. 浏览器接收开放的要求,并要求为页的Web服务器。一旦浏览 器收到的网页,呈现在保留帧/窗口。 处理HTTPS和安全弹出 许多应用程序使用HTTP到HTTPS切换,当他们需要发送加密信息,如密码或信用卡信息。这是共同的,今天的许多Web应用程序。Selenium RC的支持。 ,以确保是真正的HTTPS站点时,浏览器将需要一个安全证书。否则,当浏览器使用HTTPS访问奥克兰,将承担该应用程序是不是'信任'。当这种情况发生时,浏览器显示安全弹出,而这些弹出窗口无法关闭使用Selenium RC的。 处理HTTPS的Selenium RC测试时,你必须使用一个运行模式支持,并处理为您的安全证书。你指定的运行模式,当您的测试程序初始化Selenium。 在Selenium RC的1.0 Beta 2和以后使用* Firefox或* IEXPLORE运行模式。在早期版本中,包括Selenium RC的1.0 Beta 1中,使用*铬或* iehta的运行模式。使用这些运行模式,你将不需要安装任何特殊的安全证书;Selenium区局会为您处理。 在1.0版本的运行模式* Firefox或* IEXPLORE建议。不过,也有额外的* iexploreproxy和* firefoxproxy的运行模式。这些只是为了向后兼容,不应该使用,除非传统的测试程序的要求。它们的使用将呈现与安全证书处理和运行多个窗口,如果你的应用程序打开其他浏览器窗口的。 在早期版本的Selenium RC,*铬或* iehta的运行模式,支持HTTPS的安全弹出的处理。这些被认为是吗??虽然他们变得相当稳定,许多人用他们的实验模式。如果您正在使用Selenium1.0,你并不需要,而不应使用,这些旧的运行模式。 安全证书的解释 通常情况下,您的浏览器会信任您正在测试的应用程序安装,你已经拥有一个安全证书。您可以检查您浏览器的选项或Internet属性(如果你不知道奥克兰的安全证书,请问您的系统管理员)。当Selenium加载您的浏览器,它注入代码,拦截浏览器和服务器之间的消息。现在的浏览器认为不可信的软件试图看起来像你的应用程序。它响应弹出消息提醒你。 为了解决这个问题,Selenium区局(再次使用时支持这个)将安装其自身的安全证书,暂时在一个地方到你的客户机的浏览器可以访问它的 运行模式。这个技巧的浏览器以为它访问一个网站从您的AUT的不同,有效地抑制了弹出。 Selenium的早期版本中使用的另一种方法是安装您的Selenium安装提供的Cybervillians安全证书。大多数用户不再需要这样做,但是,如果您正在运行中的Selenium RC代理注入模式,您可能需要明确安装此安全证书。 支持其他浏览器和浏览器配置 SeleniumAPI除了Internet Explorer和Mozilla Firefox的支持对多个浏览器上运行的。看到SeleniumHQ.org网站支持的浏览器。此外,当浏览器不直接支持,你可能仍然对您选择的浏览器中运行 Selenium测试,测试应用程序启动时,使用“*定制”的运行模式(即在Firefox或* IEXPLORE)浏览器。有了这个,你通过浏览器的可执行文件内的路径API调用。这也可以在交互模式下的服务器。 CMD = getNewBrowserSession&1 = *自定义C:\\ P rogram文件\\ M ozilla火狐\\ M yBrowser.exe和2 = http://www.google.com 具有不同的浏览器配置的运行测试 通常Selenium RC的自动配置浏览器,但如果你启动浏览器,使用“*定制”的运行模式,可以强制Selenium区局推出的浏览器不使用自动配置。 例如,你可以推出这样一个自定义配置的Firefox: CMD = getNewBrowserSession&1 = *自定义C:\\ P rogram文件\\ M ozilla火狐\\ F irefox.exe&2 = http://www.google.com 请注意,启动浏览器时,这种方式,你必须手动配置浏览器使用 Selenium作为代理服务器。通常,这只是意味着打开浏览器的喜好和指定的“localhost:4444”作为HTTP代理,但这个指示可以从浏览器上的根本不同。请您浏览器的说明文件。 要知道,Mozilla浏览器可以在不同的他们如何启动和停止。一个可能需要设置的MOZ_NO_REMOTE的环境变量,使一点Mozilla浏览器的行为更可预见的。Unix用户应避免使用shell脚本启动浏览器,它是普遍使用的二进制可执行文件(如Firefox斌)直接。 故障排除常见问题 当开始使用Selenium RC还有一个经常遇到的一些潜在的问题。我们提出他们连同他们的解决方案。 无法连接到服务器 当你的测试程序无法连接到Selenium Server,Selenium在您的测试程序抛出一个异常。它应该显示此消息或类似的一个: “无法连接到远程服务器(内蒙古异常消息: 无连接可以作出,因为目标机器积极地 拒绝它)“ (使用。NET和XP的Service Pack 2 ) 如果你看到这样的消息,为确保您启动Selenium服务器。如果这样的话,存在与Selenium客户端库和Selenium服务器之间的连接的问题。 Selenium区局开始时,大多数人开始他们的测试程序(与Selenium客户库)和Selenium服务器在同一台机器上运行。做你的连接参数使用“localhost”。我们建议开始这种方式,因为它减少了潜在的网络问题,你开始的影响。假设你的操作系统,具有典型的网络和TCP / IP设置,你应该有什么困难。说实话,很多人选择这种方式来运行测试。 然而,如果你想在远程计算机上运行Selenium服务器,连接假设你有有效的TCP / IP的两台计算机之间的连接,应该罚款。 如果你有连接困难,你可以像使用常见的网络工具平, 远程登录,使用ifconfig(UNIX)/ IPCONFIG(Windows)中,等,以确保你有一个有效的网络连接。如果这些unfamilar的,您的系统管理员,可以帮助你。 无法加载浏览器 确定,而不是一个友好的错误消息,很抱歉,但如果Selenium服务器无法加载浏览器likley,你会看到这个错误。 ( 500 )内部服务器错误 这可能是由于 火狐(Selenium1.0之前)不能启动,因为浏览器已经打开,并且没有指定一个单独的配置文件。看到Firefox的配置文件服务器选项下的部分。 你使用的运行模式不匹配你的机器上的任何浏览器。检查参数传 递给Selenium,当你的程序打开浏览器。 您指定的浏览器明确的路径(使用“*自定义”,见上文),但路 径是不正确的。检查,以确保路径是正确的。同时检查用户组,以确保您的浏览器和“*自定义”参数有没有已知的问题。 Selenium能不能找到AUT的 如果你的测试程序成功启动浏览器,但浏览器不会显示你正在测试的网站,最可能的原因是你的测试程序不使用正确的URL。 这可以很容易地发生。当您使用SeleniumIDE导出脚本,插入一个虚拟的URL。您必须手动更改为你的应用程序进行测试的正确的URL。 Firefox拒绝关闭,而准备简介 这最常发生,当你运行你的Selenium RC针对Firefox的测试程序,但你已经运行Firefox浏览器会话,并没有指定一个单独的配置文件,当您启动Selenium服务器。从测试程序的错误看起来像这样: 错误:java.lang.RuntimeException:火狐拒绝关机,而 准备一个配置文件 下面是从服务器的完整的错误消息: 16:20:03.919信息 - 准备的Firefox配置文件... 16:20:27.822警告- GET / selenium-server/driver / CMD = getNewBrowserSession&1 = *杉木 efox&2 =的http%3A%2F%2fsage-webapp1.qa.idc.com HTTP/1.1的 java.lang.RuntimeException:Firefox拒绝关机,同时准备一个配置文件 在 org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLaunc her.waitForFullProfileToBeCreated ( FirefoxCustomProfileLauncher.java:277 ) ... 引起: org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLaunc的 她为FileLockRemainedException:锁文件依然存在!C:\\ d OCUME〜1 \\ J斯威克\\ L OCALS 〜1 \\ T EMP \\ C ustomProfileDir203138 \\ P arent.lock 为了解决这个问题,对部分指定一个单独的Firefox配置文件 版本问题 确保您的Selenium版本支持您的浏览器版本。例如,Selenium RC的0.92不支持Firefox 3。有时你可能会很幸运(我)。但是不要忘了检查Selenium您正在使用的版本支持的浏览器版本。有疑问时,使用最广泛使用的浏览器版本Selenium的最新发行版本。 错误消息:“(不支持的major.minor版本49.0)”,同时启动服务器 这个错误说你没有用正确的Java版本。Selenium服务器需要Java 1.5或更高。 要检查仔细检查你的Java版本,从这个命令行运行。 Java的版本 您应该看到一条消息,显示了Java版本。 java版本“1.5.0_07”的 Java ( TM ) 2运行时环境,标准版(生成1.5.0_07-B03 ) 的Java HotSpot ( TM )客户端VM (生成1.5.0_07-B03,混合模式) 如果你看到一个较低的版本号,您可能需要更新的JRE,或者你可能仅仅需要将它添加到你的PATH环境变量。 404错误,运行时getNewBrowserSession命令 如果你得到一个404错误,而试图打开“页面 http://www.google.com/selenium-server/ “,那么它必须是因为Selenium服务器没有被正确配置代理。“Selenium服务器”目录不存在google.com上,它似乎只存在代理配置正确时。代理配置在很大程度上取决于如何在浏览器推出IEXPLORE,歌剧,或*自定义*火狐,*。 * IEXPLORE:如果启动浏览器使用* IEXPLORE,你可以有一个与Internet Explorer的代理设置的问题。Selenium服务器试图在“Internet选项”控制面板配置全局代理设置。你必须确保这些正确配置时,Selenium服务器启动浏览器。尝试在您的Internet选项控制面板。点击“连接”标签,点击“局域网设置”。 o 如果您需要使用代理访问你要测试的应用 程序,你需要启动Selenium服务器与“Dhttp.proxyHost”;看到代理配置的详细信息。 o 你也可以尝试手动配置您的代理,然后启动*自定义的浏览器,或与* iehta浏览器发射。 *自定义:当使用*自定义,你必须正确地配置代理(手 动), 否则,你会得到一个404错误。仔细检查您已经正确地配置您的代理设置。检查您是否已经正确配置的代理,是试图故意不正确配置浏览器。尝试配置浏览器使用了错误的代理服务器的主机名或错误的端口。如果你已经成功地配置浏览器的代理设置不正确,那么 浏览器将无法连接到互联网,这是一个确保,一个是调整相关设置的方式。 对于其他浏览器(火狐,歌剧),我们硬编码自动为您代理,以便进一步与此功能没有已知问题。如果你遇到404错误,并按照本用户指南仔细发表您的结果,以帮助一些来自用户社区的用户组。 权限被拒绝错误 这个错误最常见的原因是,您的会议跨越域边界的企图违反相同来源(例如,访问从页面http://domain1的,然后访问一个页面http://domain2)或开关协议(移动从http://domainX到https://domainX)。 此错误也可能发生,当JavaScript试图找到UI对象尚未(页面完全加载之前),或不再可用(页面后已开始卸载)。这是最通常遇到AJAX页面与页面的部分或副车架负载和/或重新载入较大的页面工作。 此错误可能是间歇性的。通常这是不可能重现调试的问题,因为故障源于调试的开销被添加到系统时,是不可再生的比赛条件。权限问题,包括在本教程中的一些细节。阅读有关部分相同来源,代理注入仔细。 处理浏览器弹出窗口 “弹出”有几种,你可以得到在一个Selenium测试。您可能无法关闭这些弹出运行Selenium命令,如果他们发起的浏览器,而不是你的奥克兰。你可能需要知道如何管理这些。每种类型的弹出需要进行不同的处理。 HTTP基本身份验证对话框:这些对话框提示用户名/密码登录到该网站。登录到一个网站,需要HTTP基本身份验证,使用URL中的用户名和密码,在RFC 1738中,像这样:打开(的 “ http://myusername:myuserpassword myexample.com /胡说/胡说/嗒嗒 “ )。 SSL证书警告:Selenium RC的自动为代理启用时,它试图欺骗SSL证书上看到这对HTTPS节。如果您的浏览器配置正确,你应该不会看到SSL证书的警告,但您可能需要配置您的浏览器,相信我们的危险“CyberVillains”SSL证书的权威。再次,请参阅如何做到这一点的HTTPS部分。 模态的JavaScript警告/确认/提示对话框:Selenium 试图隐瞒你的对话(取代window.alert, window.confirm和window.prompt),所以他们不会停止页的执行。如果你看到一个警告弹出,这可能是因 为它在页面加载过程中,通常是为时过早,我们要保护页发射。Selenese的包含断言或核实提醒和确认弹出的命令。看到这些议题在第4章的部分。 在Linux上,为什么不是我的Firefox浏览器会议闭幕? Unix / Linux上,你必须调用“与firefox-bin”的直接,所以要确保可执行文件路径。如果通过一个shell脚本执行Firefox中,当它来杀人的Selenium RC会杀死shell脚本的浏览器,让浏览器中运行的时候。您可以指定路径直接火狐斌,像这样。 CMD = *火狐的/ usr /本地/火狐/火狐斌= getNewBrowserSession&1 &2 = http://www.google.com 火狐浏览器不使用自定义配置文件 检查的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浏览器和多窗口模式 注:本节尚未开发。 Linux上的Firefox 在Unix / Linux,版本1.0之前,需要调用“火狐斌”直接,所以如果你使用的是旧版本,确保真正的可执行文件路径是Selenium。 在大多数Linux发行版,真正的Firefox斌位于: / usr / lib中/ Firefox的XXX / 其中xxx是您目前拥有的版本号。因此,该路径添加到用户的路径。你将有以下内容添加到你的bashrc中的文件。 出口的PATH = “$ PATH :/ USR / LIB /火狐-XXX /” 如果有必要,你可以指定直接在您的测试与firefox-bin的路径,像这样: “*火狐/ usr / lib中/ Firefox的XXX /火狐斌” IE浏览器和样式属性 如果您正在运行在Internet Explorer的测试和你不能使用自己的风格属性定位元素。例如: / / TD @风格= “背景色:黄色” ] 这将工作在Firefox,Opera或Safari完美,但不与IE浏览器。IE浏览器解释@风格为大写键 。所以,即使源代码是小写,你应该使用: / / TD @风格= “背景颜色:黄色” ] 这是一个问题,如果您的测试是为了在多个浏览器,但你可以很容易地编写测试来检测的情况,并尝试另类的定位,只有在IE工作。 遇到的错误- “无法转换对象的原始值”* googlechrome浏览器关闭 为了避免这种错误,你必须开始一个选项,禁用相同来源检查浏览器: selenium.start (“commandLineFlags = -禁用网络安全” ) ; 请问在哪里可以在这里找不到答案的问题? 试试我们的用户群 ©版权所有2008年至2012年,Selenium项目。最后更新于2012年06月01,。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务