我第一次在SO上发布一个问题,我希望我做得对。
it (' :: 2.0 service creation :: should fill out service info tab', function(){
createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName);
createNewService.selectCategory();
createNewService.setIntroText(e2eConfig.newServiceDetails.introText);
createNewService.selectParent();
createNewService.uploadIcon();
createNewService.nextTab();
//right now assert will fire off without running the methods above because
//we are still on the infoTab
assert(($(createNewService.selectors.infoTab).isDisplayed()) == true, 'did not move to the next tab');
},20000);
此测试的作用是填充输入,在必要时选择下拉菜单并上传文件。
然后,测试尝试切换到小部件中的下一个选项卡。
要确定它是否设法切换到下一个标签,我想使用自定义消息进行chai库断言。
使用当前代码,assert将返回true,因为它看到infoTab并且测试将失败而不在断言之前运行任何方法
如果我更改断言行以查找'!== true',那么它将运行方法并继续
在任何情况下,以不同方式执行此操作或使用expect而不是assert会更好吗?
答案 0 :(得分:1)
所有Protractor函数调用都会返回异步解析的promises,因此如果您在createNewService
上定义的函数都调用了Protractor函数,那么在调用assert之前,您必须等待它们解析。尝试以下内容:
it (' :: 2.0 service creation :: should fill out service info tab', function(done) {
createNewService.setServiceName(e2eConfig.newServiceDetails.basicServiceName);
createNewService.selectCategory();
createNewService.setIntroText(e2eConfig.newServiceDetails.introText);
createNewService.selectParent();
createNewService.uploadIcon();
createNewService.nextTab().then(function() {
assert.eventually.strictEqual($(createNewService.selectors.infoTab).isDisplayed(), true, 'did not move to the next tab');
done();
});
},20000);
有几点需要注意:
createNewService.nextTab()
返回一个承诺。