迷惘的码农。
分类:
2008-04-07 09:36:20
是一款测试工具,允许你为web应用编写自动化的用户接口测试,支持任何程序设计语言、任何HTTP站点以及任何主流浏览器。它使用,这是个利用JavaScript执行自动浏览器任务的库。Selenium测试直接运行于浏览器中,就像真实做的那样。这些测试既可用于验收测试(通过在集成系统上执行更高级的测试而不是只独立地测试系统的各个单元),又可用于浏览器兼容性测试(通过测试不同操作系统和浏览器上的web应用)。
我看看下Selenium RC是如何安装的:
server/selenium-server.jar
至/usr/local/bin
(例如)。java -jar /usr/local/bin/selenium-server.jar
启动Selenium RC服务器。现在我们可以利用它的客户/服务器协议向Selenium RC服务器发送命令了。
PHPUnit_Extensions_SeleniumTestCase
测试用例扩展将同Selenium RC通话的客户/服务器协议实现为专门用于web测试的断言方法。
显示如何测试站点的
元素的内容。
范例 19.1: PHPUnit_Extensions_SeleniumTestCase使用举例
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
protected function setUp()
{
$this->setBrowser('*firefox /usr/lib/firefox/firefox-bin');
$this->setBrowserUrl('');
}
public function testTitle()
{
$this->open('');
$this->assertTitleEquals('Example Web Page');
}
}
?>
不同于PHPUnit_Framework_TestCase
类,扩展了PHPUnit_Extensions_SeleniumTestCase
的测试用例类必须提供setUp()
方法。该方法用于配置Selenium RC会话。可用于此的方法列表见。
表 19.1. Selenium RC API:装配
方法 | 含义 |
---|---|
void setBrowser(string $browser) | Selenium RC服务器使用的浏览器。 |
void setBrowserUrl(string $browserUrl) | 设置用于测试的基址URL。 |
void setHost(string $host) | 设置连接到Selenium RC服务器的主机名。 |
void setPort(int $port) | 设置连接到Selenium RC服务器的端口号。 |
void setTimeout(int $timeout) | 设置连接到Selenium RC服务器的超时时间。 |
void setSleep(int $seconds) | 设置Selenium RC客户端向Selenium RC服务器发送动作指令之间睡眠的秒数。 |
你也可以使用一组浏览器运行每一个测试:在你的测试用例类中声明一个名为$browsers
的public static
数组代替使用setBrowser()
设置一个浏览器。该数组中的每一项都描述一个浏览器配置。这些浏览器中的每一个都能被不同的Selenium RC服务器接待:
范例 19.2: 设置多浏览器配置
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
public static $browsers = array(
array(
'name' => 'Firefox on Linux',
'browser' => '*firefox /usr/lib/firefox/firefox-bin',
'host' => 'my.linux.box',
'port' => 4444,
'timeout' => 30000,
),
array(
'name' => 'Safari on MacOS X',
'browser' => '*safari',
'host' => 'my.macosx.box',
'port' => 4444,
'timeout' => 30000,
),
array(
'name' => 'Safari on Windows XP',
'browser' => '*custom C:\Program Files\Safari\Safari.exe -url',
'host' => 'my.windowsxp.box',
'port' => 4444,
'timeout' => 30000,
),
array(
'name' => 'Internet Explorer on Windows XP',
'browser' => '*iexplore',
'host' => 'my.windowsxp.box',
'port' => 4444,
'timeout' => 30000,
)
);
protected function setUp()
{
$this->setBrowserUrl('');
}
public function testTitle()
{
$this->open('');
$this->assertTitleEquals('Example Web Page');
}
}
?>
PHPUnit_Extensions_SeleniumTestCase
能够收集测试经由Selenium运行时的代码覆盖率信息:
PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php
到你的web服务器的文件根目录中。php.ini
配置文件中,配置PHPUnit/Extensions/SeleniumTestCase/prepend.php
和PHPUnit/Extensions/SeleniumTestCase/append.php
分别作为auto_prepend_file
和auto_append_file
。PHPUnit_Extensions_SeleniumTestCase
的测试用例类中,使用protected $coverageScriptUrl = '';
配置用于phpunit_coverage.php
脚本的URL。
列出PHPUnit_Extensions_SeleniumTestCase
提供的各种断言方法。
表 19.2. 断言
断言 | 含义 |
---|---|
void assertAlertPresent() | 如果不存在警告(对话框)则报错。 |
void assertNoAlertPresent() | 如果存在警告(对话框)则报错。 |
void assertChecked(string $locator) | 如果$locator 标识的元素未选中则报错。 |
void assertNotChecked(string $locator) | 如果$locator 标识的元素被选中则报错。 |
void assertConfirmationPresent() | 如果不存在确认(对话框)则报错。 |
void assertNoConfirmationPresent() | 如果存在确认(对话框)则报错。 |
void assertEditable(string $locator) | 如果$locator 标识的元素不可编辑则报错。 |
void assertNotEditable(string $locator) | 如果$locator 标识的元素可编辑则报错。 |
void assertElementValueEquals(string $locator, string $text) | 如果$locator 标识的元素的值不等于给定的$text 则报错。 |
void assertElementValueNotEquals(string $locator, string $text) | 如果$locator 标识的元素的值等于给定的$text 则报错。 |
void assertElementContainsText(string $locator, string $text) | 如果$locator 标识的元素不含给定的$text 则报错。 |
void assertElementNotContainsText(string $locator, string $text) | 如果$locator 标识的元素包含给定的$text 则报错。 |
void assertElementPresent(string $locator) | 如果$locator 标识的元素不存在则报错。 |
void assertElementNotPresent(string $locator) | 如果$locator 标识的元素存在则报错。 |
void assertLocationEquals(string $location) | 如果当前位置(location)不等于给定的$location 则报错。 |
void assertLocationNotEquals(string $location) | 如果当前位置(location)等于给定的$location 则报错。 |
void assertPromptPresent() | 如果不存在提示(对话框)则报错。 |
void assertNoPromptPresent() | 如果存在提示(对话框)则报错。 |
void assertSelectHasOption(string $selectLocator, string $option) | 如果给定的选项不可用则报错。 |
void assertSelectNotHasOption(string $selectLocator, string $option) | 如果给定的选项可用则报错。 |
void assertSelected($selectLocator, $option) | 如果给定的标签未选中则报错。 |
void assertNotSelected($selectLocator, $option) | 如果给定的标签被选中则报错。 |
void assertIsSelected(string $selectLocator, string $value) | 如果给定的值未选中则报错。 |
void assertIsNotSelected(string $selectLocator, string $value) | 如果给定的值被选中则报错。 |
void assertSomethingSelected(string $selectLocator) | 如果$selectLocator 标识的选项未选中则报错。 |
void assertNothingSelected(string $selectLocator) | 如果$selectLocator 标识的选项被选中则报错。 |
void assertTextPresent(string $pattern) | 如果给定的$pattern 不存在则报错。 |
void assertTextNotPresent(string $pattern) | 如果给定的$pattern 存在则报错。 |
void assertTitleEquals(string $title) | 如果当前标题不等于给定的$title 则报错。 |
void assertTitleNotEquals(string $title) | 如果当前标题等于给定的$title 则报错。 |
void assertVisible(string $locator) | 如果$locator 标识的元素不可见则报错。 |
void assertNotVisible(string $locator) | 如果$locator 标识的元素可见则报错。 |
显示PHPUnit_Extensions_SeleniumTestCase
的两个模板方法:
表 19.3. 模板方法
方法 | 含义 |
---|---|
void defaultAssertions() | 重写以执行一个测试用例中的所有测试共享的断言。该方法在发送给Selenium RC服务器的每个命令之后被调用。 |
void sharedAssertions() | 重写以执行一个测试用例中的所有测试共享的断言。该方法在一个测试执行结束之前被调用。 |
请查阅获得关于可用的命令以及如何使用的参考。
利用runSelenese($filename)
方法,你也能从它的Selenese/HTML规范运行一个Selenium测试。此外,利用静态属性$seleneseDirectory
,你能从一个包含Selenese/HTML文件的目录自动地创建测试对象。指定的目录被递归地搜索预期包含Selenese/HTML的.htm
文件。
显示一个例子。
范例 19.3: 使用Selenese/HTML文件的目录作为测试
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class SeleneseTests extends PHPUnit_Extensions_SeleniumTestCase
{
public static $seleneseDirectory = '/path/to/files';
}
?>