PHPUnit_Extensions_SeleniumTestCase
PHPUnit_Extensions_SeleniumTestCase测试用例扩展将同Selenium RC通话的客户/服务器协议实现为专门用于web测试的断言方法。
范例 19.1显示如何测试http://www.example.com/站点的
元素的内容。范例 19.1: PHPUnit_Extensions_SeleniumTestCase使用举例
<?phprequire_once 'PHPUnit/Extensions/SeleniumTestCase.php'; class WebTest extends PHPUnit_Extensions_SeleniumTestCase{ protected function setUp() { $this->setBrowser('*firefox /usr/lib/firefox/firefox-bin'); $this->setBrowserUrl('http://www.example.com/'); } public function testTitle() { $this->open('http://www.example.com/'); $this->assertTitleEquals('Example Web Page'); }}?>
不同于PHPUnit_Framework_TestCase类,扩展了PHPUnit_Extensions_SeleniumTestCase的测试用例类必须提供setUp()方法。该方法用于配置Selenium RC会话。可用于此的方法列表见表 19.1。
表 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: 设置多浏览器配置
<?phprequire_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('http://www.example.com/'); } public function testTitle() { $this->open('http://www.example.com/'); $this->assertTitleEquals('Example Web Page'); }}?>
PHPUnit_Extensions_SeleniumTestCase能够收集测试经由Selenium运行时的代码覆盖率信息:
拷贝PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php到你的web服务器的文件根目录中。
在你的web服务器的php.ini配置文件中,配置PHPUnit/Extensions/SeleniumTestCase/prepend.php和PHPUnit/Extensions/SeleniumTestCase/append.php分别作为auto_prepend_file和auto_append_file。
在你的扩展了PHPUnit_Extensions_SeleniumTestCase的测试用例类中,使用protected $coverageScriptUrl = 'http://host/phpunit_coverage.php';配置用于phpunit_coverage.php脚本的URL。
表 19.2列出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标识的元素可见则报错。
表 19.3显示PHPUnit_Extensions_SeleniumTestCase的两个模板方法:
表 19.3. 模板方法
方法含义void defaultAssertions()重写以执行一个测试用例中的所有测试共享的断言。该方法在发送给Selenium RC服务器的每个命令之后被调用。
void sharedAssertions()重写以执行一个测试用例中的所有测试共享的断言。该方法在一个测试执行结束之前被调用。
请查阅Selenium Core的文档获得关于可用的命令以及如何使用的参考。
利用runSelenese($filename)方法,你也能从它的Selenese/HTML规范运行一个Selenium测试。此外,利用静态属性$seleneseDirectory,你能从一个包含Selenese/HTML文件的目录自动地创建测试对象。指定的目录被递归地搜索预期包含Selenese/HTML的.htm文件。 范例 19.3显示一个例子。
范例 19.3: 使用Selenese/HTML文件的目录作为测试