sam152 / mink-page-objects
该包的最新版本(0.0.3)没有可用的许可证信息。
phpunit的通用页面对象。
0.0.3
2019-05-16 08:09 UTC
Requires
- behat/mink: 1.7.x-dev
Requires (Dev)
- behat/mink-goutte-driver: ^1.2
- phpunit/phpunit: ^7.5
This package is not auto-updated.
Last update: 2024-09-28 07:49:33 UTC
README
这是一个使用Mink API实现的页面对象实现。这个库是在现有的Mink API之上的一个薄层,但封装成了页面对象。一个页面对象可能包含一组选择器、表单字段和执行常见测试相关操作的函数。
这个库旨在轻量级,尽可能减少在现有Mink API之上引入的新API界面。选择器和表单字段列表受到了nightwatch.js的启发。
通过实现页面对象
- 您可以创建更容易阅读和维护的测试。
- 您减少了测试用例和标记之间的耦合。
- 通过简化整个过程,您鼓励进行彻底的测试。
有关页面对象优势的进一步阅读,请参阅Martin Fowler关于此主题的博客文章。
以下是一个使用此库为登录页面定义的页面对象示例
<?php
/**
* The login page object.
*/
class LoginPage extends MinkPageObjects\PageObjectBase {
/**
* {@inheritdoc}
*/
public function getUrl() {
return '/user/login';
}
/**
* {@inheritdoc}
*/
protected function getElements() {
return [
'messages' => '.messages',
];
}
/**
* {@inheritdoc}
*/
protected function getNamedFieldElements() {
return [
'name' => 'edit-name',
'password' => 'edit-password',
'submit' => 'edit-submit',
];
}
/**
* Login as a given user.
*
* @param string $username
* The username.
* @param string $password
* The password.
*/
public function loginAs($username, $password) {
$this->find('@name')->setValue($username);
$this->find('@password')->setValue($password);
$this->find('@submit')->click();
return $this;
}
/**
* Assert the user was logged in successfully.
*/
public function assertLoginSuccess() {
$this->elementContains('@messages', 'You were logged in successfully.');
return $this;
}
/**
* Assert the user was logged in successfully.
*/
public function assertLoginFail() {
$this->elementContains('@messages', 'You failed to login.');
return $this;
}
}
在测试中使用页面对象可能看起来像这样
<?php
/**
* The login page test case.
*/
class LoginPageTest extends PHPUnit\Framework\TestCase {
/**
* Test the login page.
*/
public function testLoginPage() {
$login = new LoginPage($this->session, $this->assert);
$login->visit()
->loginAs('test-user', 'test-password')
->assertLoginSuccess();
}
}
在用户在两个不同页面对象表示的不同界面之间导航时,页面对象上的方法可能会返回其他页面对象
<?php
/**
* The article list page object.
*/
class ArticleListPage extends MinkPageObjects\PageObjectBase {
/**
* {@inheritdoc}
*/
public function getUrl() {
return '/articles';
}
/**
* {@inheritdoc}
*/
protected function getElements() {
return [
'articles' => '.articles article',
'first-article-link' => '.articles article:first-child h2 a',
];
}
/**
* Login as a given user.
*
* @param string $username
* The username.
* @param string $password
* The password.
*/
public function visitFirstArticle() {
$this->find('@first-article-link')->click();
return new ArticlePage($this->getSession(), $this->assertSession());
}
public function assertArticleCount($total) {
$this->elementsCount('@articles', $total);
return $this;
}
}
然后,测试方法可以在多个不同页面对象的方法之间无缝转换
<?php
$article_list
->assertArticleCount(5)
->visitFirstArticle()
->assertAuthor('Sam');