在網頁自動化測試中,我們常常需要模擬用戶在瀏覽器中的操作來進行測試。其中,使用PHP作為后端語言的測試項目,就需要用到PHP HTMLUnit。
HTMLUnit通過模擬瀏覽器的行為來執行JS、項目的功能等。它可以當作一個WebClient或一個瀏覽器來直接使用,提供給我們便利的API用來完成測試任務,如點擊按鈕、填寫表單、提交請求,甚至可以獲取網頁中的標簽信息等。
// 一個HTMLUnit示例 $client = new \JonnyW\Html\HtmlUnitDriver(false); $client->setBrowserUrl('http://example.com/'); $client->visit('/'); $form = $client->getCrawler()->selectButton('submit')->form(); $form['username'] = 'john_smith'; $form['password'] = 'secret'; $client->submit($form);
查找控件可用的方法有很多,根據HTML樹一般有CSS selector、XPath等方法。例如:
$crawler = $client->getCrawler(); $node = $crawler->filter('.item h3.title a')->first(); $title = $node->text(); $link = $node->attr('href');
此外,HTMLUnit可以通過headless方式運行,不需要瀏覽器界面,使用更為方便。也可以結合PHPUnit、Selenium等測試工具使用,進一步提高測試效率。
例如,以下是一個HTMLUnit和PHPUnit的結合示例:
class TestCase extends \PHPUnit_Framework_TestCase { private $client; public function __construct($name = null, array $data = array(), $dataName = '') { parent::__construct($name, $data, $dataName); $this->client = new \JonnyW\Html\HtmlUnitDriver(false); $this->client->setBrowserUrl('http://localhost:8000'); } public function tearDown() { parent::tearDown(); $this->client->stop(); } public function testLogin() { $crawler = $this->client->getCrawler(); $link = $crawler->filter('a[href="/login"]')->link(); $crawler = $this->client->click($link); $this->assertEquals('Login Page', $crawler->filter('h1')->text()); $form = $crawler->selectButton('login')->form(); $form['username'] = 'admin'; $form['password'] = 'password'; $crawler = $this->client->submit($form); $this->assertEquals('Successful', $crawler->filter('h1')->text()); } }
總之,PHP HTMLUnit提供了豐富的功能和API,使得我們在網頁自動化測試中能夠輕松地模擬用戶的操作,進而完成各類測試任務。