`
qi_ling2006
  • 浏览: 21366 次
社区版块
存档分类
最新评论

Selenium用户指南 - 第六章 Selenium 1 (Selenium RC)[2]

 
阅读更多

 

了解API

Selenium RC API使用命名约定,假定你理解Selenese,大量的接口是自解释的。在此,我们解释最关键以及可能不太明显的内容。

启动浏览器

setUp("http://www.google.com/", "*firefox");

这些示例中的每一个打开浏览器,并分配浏览器“浏览器实例”给一个程序变量以代表这个浏览器。这个程序变量被使用于调用来自于浏览器的方法。

创建浏览器实例需要的参数是:

 

host指定服务器位于的计算机的IP地址。通常,这是与客户端运行的相同的机器,在这种情况下,可以是localhost。在某些客户驱动程序中中,这是一个可选参数。port指定服务器侦听等待客户连接的TCP/IP socket端口。在某些客户驱动程序中这也是可选的。brower是你希望运行测试的浏览器。这时一个必须的参数。url测试中的应用程序的基url。这是所有的客户端库所必须的,这是用于启动browser-proxy-AUT通讯的地完整信息。

注意,某些客户端库要求,要启动浏览器必须显式地调用它的start()方法。

运行命令

一旦你有一个初始化的浏览器,并分配给一个变量(通常命名为“selenium”),你可以从浏览器变量,通过调用不同的方法让它运行Selenese命令。

selenium.type(“field-id”,”string to type”)

在后台,浏览器将实际执行一个键入操作,基本上与一个用户在浏览器中键入一样,但使用定位器和在调用中指定的字符串。

报告结果

Selenium RC没有它自己的、用于报告的机制,他允许你使用选择的编程语言按需构造一个报告。这很好,但如果你仅仅想要那些已经为你准备好的东西哪?时常一个现存的类库或测试框架可以满足你的需要,比你自己开发测试报告代码更快。

测试框架报告工具

对许多编程语言来说,测试框架是可得到的。这些,以及它们的主要功能,那个提供的一个灵活的测试引擎用来执行你的测试代码的,包括用于报告结果的库代码。例如,Java有两个常用的测试框架,JUnit和TestNG,.NET也有它自己的NUnit。

我们不会在此讲解框架本身;那个超出了本用户指南的范畴。我们仅仅介绍框架的特征,那些与Selenium有关的以及你应用的某些技术。在internet上,可以获得有关这些测试框架的很好的数据以及相关的信息。

测试报告库

用于使用你选择的编程语言报告测试结果的,特别创建的第三方库也是可得到的。这些时常支持各种各样的格式,包括HTML或PDF。

最好的方法是什么?

大部分测试框架的新手从使用框架内置的报告功能开始。从那里大多数人可以查看任何可得到的库,因为这比开发自己的要花更少的时间。当你开始使用Selenium时,毫无疑问你会为报告过程开始投入你自己的“打印语句”。那会逐步地引导你开发你自己的报告,或并行地使用一个库或测试框架。不管怎样,在一个初期的,但很短的学习曲线后,你会自然地开发适合你情况的效果最好的东西。

测试报告示例

为了演示,我们会引导你使用某些特定的、Selenium支持的某些语言的工具。在此列出的是由指南的作者常用的,以及得到广泛使用的工具。

测试报告为Java

- 如果Selenium测试案例的开发使用JUnit,则JUnit报告可以被使用于生成测试报告。详细说明参考JUnit Report

- 如果Selenium测试案例使用TestNG开发,则生成测试报告没有额外的工作需要做。TestNG框架生成一个HTML报告,列出测试结果的详细信息。更多的信息参见TestNG Report。

- ReportNG是TestNG框架的一个HTML报告插件。用于作为一个默认TestNG的HTML报告的替代。ReportNG提供一个简单、代码着色的测试结果视图。更多的信息参见ReportNG。

- 同样,如果需要一个很好的概要报告可试用一下TestNG-xslt。一个TestNG-xslt看起来像这样。

更多的信息参见TestNG-xslt。

日志Selenese命令

- Logging Selenium可以用于生成在你的测试中所有Selenese命令以及每个执行成功或失败的报告,Logging Selenium扩展Java客户端驱动程序以增加Selenese的日志能力。请参考Logging Selenium。

测试报告为Phython

- 当使用Python客户端驱动程序时,可以使用HTML TestRunner生成测试报告。参见HTML TestRunner。

测试报告为Ruby

- 使用Ruby,如果RSpec被使用于编写Selenium测试案例,那么它的HTML报告可以用于生成测试报告。参考RSpec Report以获得更多信息。

注释

如果你对一个语言无关的独立日志将做什么感兴趣,可以看看Selenium Server Logging。

增加某些调味瓶到你的测试

现在我们将接触到使用Selenium RC的全部理由,增加编程逻辑到你的测试。它与任何程序是相同的。程序流使用条件语句和迭代进行控制。此外,你可以报告进度信息使用I/O。在本节,我们将展示某些编程语言构造如何与Selenium结合解决公共的测试问题的示例。

你会发现,当你从简单的页面元素存在性的测试,到涉及多Web页的动态功能和变化的数据的测试转换时,你会需要编程逻辑来验证预期的结果。基本上,Selenium IDE不支持迭代和标准的条件语句。你可以使用嵌入在Selenese参数的javascript完成某些条件语句,然而迭代是不可能的,而且大多数的条件语句使用一个编程语言更容易完成。此外,你可能需要异常处理用于错误恢复。为这些以及其他的理由,我们编写了本节去演示公共编程技术的使用,以便给于你在自动化测试中一个极大的“验证能力”。

在本节的示例是使用C#和Java编写的,然而这代码是简单的,可以容易地改写到其他支持语言。如果你有有关面向对象编程语言的基础知识,你应该没有困难理解本节。

迭代

迭代是人们需要在他们的测试中完成的最普通的事情之一。例如,你可能希望执行一个搜索多次。或者,或许为了验证你的测试结果,你需要处理从一个数据库返回的“结果集”。

使用我们较早使用的相同的Google搜索示例,让我们检查Selenium搜索结果。这个测试可以使用Selenese:

open /
type q selenium rc
clickAndWait btnG
assertTextPresent Results * for selenium rc
type q selenium ide
clickAndWait btnG
assertTextPresent Results * for selenium ide
type q selenium grid
clickAndWait btnG
assertTextPresent Results * for selenium grid

这个代码已经被重复运行这相同的步骤3次。相同代码的多个拷贝不是一个好的编程实践,因为需要做更多的工作去维护。通过使用编程语言,我们可以迭代搜索结果,提供一个更灵活和可维护的解决方案。

用C#:

// 一个字符串的集合

String[] arr = {"ide", "rc", "grid"};

// 循环执行数组中的每隔字符串

foreach (String s in arr) {
sel.open("/");
sel.type("q", "selenium " +s);
sel.click("btnG");
sel.waitForPageToLoad("30000");
assertTrue("Expected text: " +s+ " is missing on page.", sel.isTextPresent("Results * for selenium " + s));
}

条件语句

为了演示在测试中使用条件语句,我们从一个示例开始。在运行Selenium测试时,一个公共的问题会出现,当在页面中某个预期的元素是不可得到时。例如,当运行下面的代码行时:

selenium.type("q", "selenium " +s);

如果元素“q”不在页面上,那么一个异常会抛出。

com.thoughtworks.selenium.SeleniumException: ERROR: Element q not found

这可能造成造成你的测试退出。对某些测试,那是你想要的。但当你的测试脚本有许多其他后面的测试的时候,这经常不是你想要。

一个更好的方法是首先验证元素是否真正地呈现,然后在没有的情况下采用替代的操作。让我们以Java为例。

 

// 如果元素是可得到的,则执行键入操作

if(selenium.isElementPresent("q")) {
selenium.type("q", "Selenium rc");
} else {
System.out.printf("Element: " +q+ " is not available on page.")
}

这个方法的好处是可以继续测试的执行,即使某些UI元素是不可得到的。

从你的测试执行JavaScript

执行JavaScript非常方便。Selenium API的getEval方法可以使用于从Selenium RC执行JavaScript。

考虑一个包含一个没有静态标识符的复选框的应用程序。在这种情况下,你可以从Selenium RC执行JavaScript获得所有复选框的id,然后检查它们。

public static String[] getAllCheckboxIds () {
String script = "var inputId = new Array();";// Create array in java script.
script += "var cnt = 0;"; // Counter for check box ids.
script += "var inputFields = new Array();"; // Create array in java script.
script += "inputFields = window.document.getElementsByTagName('input');"; // Collect input elements.
script += "for(var i=0; i<inputFields.length; i++) {"; // Loop through the collected elements.
script += "if(inputFields[i].id !=null " +
"&& inputFields[i].id !='undefined' " +
"&& inputFields[i].getAttribute('type') == 'checkbox') {"; // If input field is of type check box and input id is not null.
script += "inputId[cnt]=inputFields[i].id ;" + // Save check box id to inputId array.
"cnt++;" + // increment the counter.
"}" + // end of if.
"}"; // end of for.
script += "inputId.toString();" ;// Convert array in to string.
String[] checkboxIds = selenium.getEval(script).split(","); // Split the string.
return checkboxIds;
}

计算页面中图像的数量:

selenium.getEval("window.document.images.length;");

记住在DOM表达式中使用windows对象,因为默认引用window,而不是测试窗口。


© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.

 

分享到:
评论

相关推荐

    快速启动selenium-RC-server

    快速启动selenium-RC-server

    ruby selenium-client-1.2.18.gem

    1. Download the latest version of Selenium RC 2. Unzip the file save it C:\selenium-remote-control-1.0.3 3. command prompt&gt;java -version –&gt; Version should grater than 1.6.0_5 4. command prompt go to ...

    selenium-server-standalone-2.25.0.jar

    (1).测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。 为什么要通过发送Http请求控制Selenium Server而不采用其他方式呢?从上文可以看出,Selenium ...

    selenium-server-standalone-3.8.1和selenium-java-3.7.1

    selenium rc。Selenium Server服务器jar包,java客户端驱动。

    selenium-RC.rar

    selenium-RC.rar,包含selenium-java-client-driver.jar,selenium-server.jar等

    selenium RC入门实例

    昨天群里有朋友问我selenium入门例子,我今天抽了点时间写了一段简单的代码,此代码适合刚刚学习selenium的人员参考,此代码是selenium2 RC 调用chrome driver访问百度,输入Jack_test 搜索. 代码里面含资源包:selenium...

    selenium-server-standalone-2.45.0

    文件为selenium-server-standalone-2.45.0.jar包,兼容最新Firefox浏览器,实现selenium+eclipse+Firefox自动化

    selenium-java-2.53.1.rar

    WebDriver旨在提供一个更简单更简洁的编程接口以及解决一些Selenium-RC API的限制。Selenium-Webdriver更好的支持页面本身不重新加载而页面的元素改变的动态网页。WebDriver的目标是提供一个良好设计的面向对象的...

    selenium-rc

    selenium1.0的自动化测试,selenium-remote-control-1.0.3,包含selenium-java-client-driver-1.0.1、selenium-php-client-driver-1.0.1等等

    selenium-server-2.9

    selenium web是一种自动化测试工具,有三部分组成selenium-ide;selenium-rc;selenium-grid。这里只是selenium-rc。

    selenium-java-2.25.0.zip

    In order to create scripts that interact with the Selenium Server (Selenium RC, Selenium Remote Webdriver) or create local Selenium WebDriver script you need to make use of language-specific client ...

    Selenium rc+selenium_java

    selenium-java-2.42.2.jar selenium-server-standalone-2.42.2.jar

    selenium-html-runner-3.141.59.jar

    Selenium 3.x不再能够直接运行SeleniumRC,而是通过仿真和WebDriverBackedSelenium接口来实现它。下载版本3.141.59以运行从遗留IDE导出的Selenium测试,使用SeleniumHTMLRunner。要在网格配置中使用SeleniumServer,...

    selenium-RC

    selenium-RC

    selenium rc使用指南

    selenium selenium rc 自动化测试

    Selenium私房菜(新手入门教程)1

    6.Selenium私房菜系列6 -- 深入了解Selenium RC工作原理(1) 7.Selenium私房菜系列7 -- 深入了解Selenium RC工作原理(2) 8.Selenium私房菜系列8 -- 玩转Selenium Server 9.Selenium私房菜系列9 -- Selenium RC服务器...

    seleniumRC

    seleniumRC有需要的可以看看,感觉这玩意官网不太好下载

    selenium-java-2.48.2

    In order to create scripts that interact with the Selenium Server (Selenium RC, Selenium Remote WebDriver) or create local Selenium WebDriver scripts, you need to make use of language-specific client ...

    Selenium-RC

    Selenium[1] 也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与...

    selenium RC与selenium webdriver的区别

    selenium RC与selenium webdriver的区别

Global site tag (gtag.js) - Google Analytics