Selenium RC
Selenium RC是一款測試工具,允許你為web應(yīng)用編寫自動化的用戶接口測試,支持任何程序設(shè)計語言、任何HTTP站點以及任何主流瀏覽器。它使用Selenium Core,這是個利用JavaScript執(zhí)行自動瀏覽器任務(wù)的庫。Selenium測試直接運行于瀏覽器中,就像真實做的那樣。這些測試既可用于驗收測試(通過在集成系統(tǒng)上執(zhí)行更高級的測試而不是只獨立地測試系統(tǒng)的各個單元),又可用于瀏覽器兼容性測試(通過測試不同操作系統(tǒng)和瀏覽器上的web應(yīng)用)。
我看看下Selenium RC是如何安裝的:
- 下載一個Selenium RC分發(fā)包存檔。
- 分發(fā)包存檔并拷貝
server/selenium-server.jar
至/usr/local/bin
(例如)。 - 通過運行
java -jar /usr/local/bin/selenium-server.jar
啟動Selenium RC服務(wù)器。
現(xiàn)在我們可以利用它的客戶/服務(wù)器協(xié)議向Selenium RC服務(wù)器發(fā)送命令了。
PHPUnit_Extensions_SeleniumTestCase
PHPUnit_Extensions_SeleniumTestCase
測試用例擴(kuò)展將同Selenium RC通話的客戶/服務(wù)器協(xié)議實現(xiàn)為專門用于web測試的斷言方法。
范例 19.1顯示如何測試http://www.example.com/
站點的<title>
元素的內(nèi)容。
范例 19.1: PHPUnit_Extensions_SeleniumTestCase使用舉例
<?php
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('http://www.example.com/');
}
public function testTitle()
{
$this->open('http://www.example.com/');
$this->assertTitleEquals('Example Web Page');
}
}
?>
不同于PHPUnit_Framework_TestCase
類,擴(kuò)展了PHPUnit_Extensions_SeleniumTestCase
的測試用例類必須提供setUp()
方法。該方法用于配置Selenium RC會話??捎糜诖说姆椒斜硪?a href="file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#selenium.seleniumtestcase.tables.seleniumrc-api.setup" title="Table 19.1. Selenium RC API: Setup" style="text-decoration: underline; color: #0044b6; ">表 19.1。
表 19.1. Selenium RC API:裝配
方法 | 含義 |
---|---|
void setBrowser(string $browser) | Selenium RC服務(wù)器使用的瀏覽器。 |
void setBrowserUrl(string $browserUrl) | 設(shè)置用于測試的基址URL。 |
void setHost(string $host) | 設(shè)置連接到Selenium RC服務(wù)器的主機(jī)名。 |
void setPort(int $port) | 設(shè)置連接到Selenium RC服務(wù)器的端口號。 |
void setTimeout(int $timeout) | 設(shè)置連接到Selenium RC服務(wù)器的超時時間。 |
void setSleep(int $seconds) | 設(shè)置Selenium RC客戶端向Selenium RC服務(wù)器發(fā)送動作指令之間睡眠的秒數(shù)。 |
你也可以使用一組瀏覽器運行每一個測試:在你的測試用例類中聲明一個名為$browsers
的public static
數(shù)組代替使用setBrowser()
設(shè)置一個瀏覽器。該數(shù)組中的每一項都描述一個瀏覽器配置。這些瀏覽器中的每一個都能被不同的Selenium RC服務(wù)器接待:
范例 19.2: 設(shè)置多瀏覽器配置
<?php
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('http://www.example.com/');
}
public function testTitle()
{
$this->open('http://www.example.com/');
$this->assertTitleEquals('Example Web Page');
}
}
?>
PHPUnit_Extensions_SeleniumTestCase
能夠收集測試經(jīng)由Selenium運行時的代碼覆蓋率信息:
- 拷貝
PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php
到你的web服務(wù)器的文件根目錄中。 - 在你的web服務(wù)器的
php.ini
配置文件中,配置PHPUnit/Extensions/SeleniumTestCase/prepend.php
和PHPUnit/Extensions/SeleniumTestCase/append.php
分別作為auto_prepend_file
和auto_append_file
。 - 在你的擴(kuò)展了
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 標(biāo)識的元素未選中則報錯。 |
void assertNotChecked(string $locator) | 如果$locator 標(biāo)識的元素被選中則報錯。 |
void assertConfirmationPresent() | 如果不存在確認(rèn)(對話框)則報錯。 |
void assertNoConfirmationPresent() | 如果存在確認(rèn)(對話框)則報錯。 |
void assertEditable(string $locator) | 如果$locator 標(biāo)識的元素不可編輯則報錯。 |
void assertNotEditable(string $locator) | 如果$locator 標(biāo)識的元素可編輯則報錯。 |
void assertElementValueEquals(string $locator, string $text) | 如果$locator 標(biāo)識的元素的值不等于給定的$text 則報錯。 |
void assertElementValueNotEquals(string $locator, string $text) | 如果$locator 標(biāo)識的元素的值等于給定的$text 則報錯。 |
void assertElementContainsText(string $locator, string $text) | 如果$locator 標(biāo)識的元素不含給定的$text 則報錯。 |
void assertElementNotContainsText(string $locator, string $text) | 如果$locator 標(biāo)識的元素包含給定的$text 則報錯。 |
void assertElementPresent(string $locator) | 如果$locator 標(biāo)識的元素不存在則報錯。 |
void assertElementNotPresent(string $locator) | 如果$locator 標(biāo)識的元素存在則報錯。 |
void assertLocationEquals(string $location) | 如果當(dāng)前位置(location)不等于給定的$location 則報錯。 |
void assertLocationNotEquals(string $location) | 如果當(dāng)前位置(location)等于給定的$location 則報錯。 |
void assertPromptPresent() | 如果不存在提示(對話框)則報錯。 |
void assertNoPromptPresent() | 如果存在提示(對話框)則報錯。 |
void assertSelectHasOption(string $selectLocator, string $option) | 如果給定的選項不可用則報錯。 |
void assertSelectNotHasOption(string $selectLocator, string $option) | 如果給定的選項可用則報錯。 |
void assertSelected($selectLocator, $option) | 如果給定的標(biāo)簽未選中則報錯。 |
void assertNotSelected($selectLocator, $option) | 如果給定的標(biāo)簽被選中則報錯。 |
void assertIsSelected(string $selectLocator, string $value) | 如果給定的值未選中則報錯。 |
void assertIsNotSelected(string $selectLocator, string $value) | 如果給定的值被選中則報錯。 |
void assertSomethingSelected(string $selectLocator) | 如果$selectLocator 標(biāo)識的選項未選中則報錯。 |
void assertNothingSelected(string $selectLocator) | 如果$selectLocator 標(biāo)識的選項被選中則報錯。 |
void assertTextPresent(string $pattern) | 如果給定的$pattern 不存在則報錯。 |
void assertTextNotPresent(string $pattern) | 如果給定的$pattern 存在則報錯。 |
void assertTitleEquals(string $title) | 如果當(dāng)前標(biāo)題不等于給定的$title 則報錯。 |
void assertTitleNotEquals(string $title) | 如果當(dāng)前標(biāo)題等于給定的$title 則報錯。 |
void assertVisible(string $locator) | 如果$locator 標(biāo)識的元素不可見則報錯。 |
void assertNotVisible(string $locator) | 如果$locator 標(biāo)識的元素可見則報錯。 |
表 19.3顯示PHPUnit_Extensions_SeleniumTestCase
的兩個模板方法:
表 19.3. 模板方法
方法 | 含義 |
---|---|
void defaultAssertions() | 重寫以執(zhí)行一個測試用例中的所有測試共享的斷言。該方法在發(fā)送給Selenium RC服務(wù)器的每個命令之后被調(diào)用。 |
void sharedAssertions() | 重寫以執(zhí)行一個測試用例中的所有測試共享的斷言。該方法在一個測試執(zhí)行結(jié)束之前被調(diào)用。 |
請查閱Selenium Core的文檔獲得關(guān)于可用的命令以及如何使用的參考。
利用runSelenese($filename)
方法,你也能從它的Selenese/HTML規(guī)范運行一個Selenium測試。此外,利用靜態(tài)屬性$seleneseDirectory
,你能從一個包含Selenese/HTML文件的目錄自動地創(chuàng)建測試對象。指定的目錄被遞歸地搜索預(yù)期包含Selenese/HTML的.htm
文件。 范例 19.3顯示一個例子。
范例 19.3: 使用Selenese/HTML文件的目錄作為測試
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class SeleneseTests extends PHPUnit_Extensions_SeleniumTestCase
{
public static $seleneseDirectory = '/path/to/files';
}
?>