验收测试 - WebDriver - 多会话测试

  • 作者:KK

  • 发表日期:2015.12.13


这是比较少需要用到的功能,但偶尔真的需要它

假设你要测试一个社交网站,要测试A用户向B用户发起好友请求后,B用户是否有收到并且可以同意成为好友,那你的测试代码click添加好友后,怎么断言B是否已经收到?以之前提供的教程信息,你只能靠Db模块来seeInDatabase,虽然我认为一般都是在内网部署测试项目,针对测试环境做测试,所以可以共享数据库,但是测试框架怎么能这么限制你呢?

于是肯定要支持你数据库不在本地时也能做到这样的测试

办法就是当模拟A用户发起好友请求后,使用haveFriend方法临时创建B用户并将session切换到B用户中进行断言,断言结束后再切换回A用户中,这就像是多窗口测试和iframe测试一样,临时切换到另一个空间中就好了.

实践

假设当前登陆用户的名称叫 小明

$I->click('#发送好友请求');
$friend = $I->haveFriend('friend1'); //创建一个新的会话,参数是一个唯一的标识符,因为你可以创建很多会话,为了识别每一个会话就要为它们起不同的名字以便切换和互相通信之类的
$friend->does(function(AcceptanceTester $I){
	//这个函数区域内是$friend的事情
	$I->amOnPage('/new-msg.html');
	$I->see('小明请求成为你的朋友');
	$I->click('.accept:nth-child(1)'); //点击同意按钮
});
$I->waitForElemenet('#newMessage'); //等待新消息提示的DOM出现.这里你要知道上面的does方法部分不是先执行完才执行这里的,这里其实并不会被does方法阻塞,而是继续往下执行,所以我们要waitForElement
$I->see('小红同意了你的好友请求');