如何使用 Bryntum Siesta 测试在 ExtJS 组合框上进行选择?
How to make selection on ExtJS Combo Box with Bryntum Siesta Test?
我有一个数据表表格,其中包括 textfield
、datefield
和 combobox
等多项内容。我如何能够使用 Siesta 为 combobox
选择项目并且我需要将 Siesta 等待时间设置为超过 30000 毫秒,因为数据正在通过 ajax
请求加载到 combobox
。
有一个我用过的片段失败了;
t.it('Should create a new registration', function (t) {
t.chain(
{click: '>> button[text=New]'},
{waitForCQ: 'regdata[title=New Registration]'},
{click: '>> firstnamefld[xtype=firstnamefld]'},
{type: 'Siesta Reg', target: '>> firstnamefld[xtype=firstnamefld]'},
{click: '>> lastnamefld[xtype=lastnamefld]'},
{type: 'Test One', target: '>> lastnamefld[xtype=lastnamefld]'},
{click: '>> datefld[xtype=datefld]'},
{type: '11.10.2017', target: '>> checkinfld[xtype=checkinfld]'}, //Probably that's not correct way to choose date on datefield but it works
//Here is making ajax request to load data in combo.but Siesta isn't waiting for selection.
//I shouldn't use 'type' for this part but I couldn't find any proper property.
{click: '>> groupcombo[xtype=groupcombo]'},
{type: 'Group One', target: '>> groupcombo[xtype=groupcombo]'}
最好 post 这样的问题 Siesta support forum (由 Bryntum 开发人员积极监控)。也欢迎在 Whosebug 上提出问题,但可能会在一段时间内被忽视。
要在 Siesta 中设置所有 "waitFor" methods/actions 的最长等待时间,您可以使用 waitForTimeout 配置选项。
要在单击 "groupcombo" 后等待 Ajax 请求完成,您可以执行以下操作:
{click: '>> groupcombo[xtype=groupcombo]'},
{
waitFor : function () {
if (someConditionThatIsTrueOnceAjaxRequestHasCompleted) return true
}
},
{type: 'Group One', target: '>> groupcombo[xtype=groupcombo]'}
但是请注意,此代码中存在潜在的竞争条件(如 here 所述)
另外,请注意,很多时候,在设置某些字段的值时,您实际上是在验证将这些字段联系在一起的其他一些核心业务逻辑。因此,并不需要严格执行实际的typing/clicking,您可以直接设置该字段的值:
t.chain(
function (next) {
t.cq1('compqueryselector1').setValue('someValue1')
t.cq1('compqueryselector2').setValue('someValue2')
next()
},
function (next) {
t.pass(businessLogicIsCorrect(), "Business logic rules works")
next()
}
)
这通常可以简化测试并且速度更快。
我有一个数据表表格,其中包括 textfield
、datefield
和 combobox
等多项内容。我如何能够使用 Siesta 为 combobox
选择项目并且我需要将 Siesta 等待时间设置为超过 30000 毫秒,因为数据正在通过 ajax
请求加载到 combobox
。
有一个我用过的片段失败了;
t.it('Should create a new registration', function (t) {
t.chain(
{click: '>> button[text=New]'},
{waitForCQ: 'regdata[title=New Registration]'},
{click: '>> firstnamefld[xtype=firstnamefld]'},
{type: 'Siesta Reg', target: '>> firstnamefld[xtype=firstnamefld]'},
{click: '>> lastnamefld[xtype=lastnamefld]'},
{type: 'Test One', target: '>> lastnamefld[xtype=lastnamefld]'},
{click: '>> datefld[xtype=datefld]'},
{type: '11.10.2017', target: '>> checkinfld[xtype=checkinfld]'}, //Probably that's not correct way to choose date on datefield but it works
//Here is making ajax request to load data in combo.but Siesta isn't waiting for selection.
//I shouldn't use 'type' for this part but I couldn't find any proper property.
{click: '>> groupcombo[xtype=groupcombo]'},
{type: 'Group One', target: '>> groupcombo[xtype=groupcombo]'}
最好 post 这样的问题 Siesta support forum (由 Bryntum 开发人员积极监控)。也欢迎在 Whosebug 上提出问题,但可能会在一段时间内被忽视。
要在 Siesta 中设置所有 "waitFor" methods/actions 的最长等待时间,您可以使用 waitForTimeout 配置选项。
要在单击 "groupcombo" 后等待 Ajax 请求完成,您可以执行以下操作:
{click: '>> groupcombo[xtype=groupcombo]'},
{
waitFor : function () {
if (someConditionThatIsTrueOnceAjaxRequestHasCompleted) return true
}
},
{type: 'Group One', target: '>> groupcombo[xtype=groupcombo]'}
但是请注意,此代码中存在潜在的竞争条件(如 here 所述)
另外,请注意,很多时候,在设置某些字段的值时,您实际上是在验证将这些字段联系在一起的其他一些核心业务逻辑。因此,并不需要严格执行实际的typing/clicking,您可以直接设置该字段的值:
t.chain(
function (next) {
t.cq1('compqueryselector1').setValue('someValue1')
t.cq1('compqueryselector2').setValue('someValue2')
next()
},
function (next) {
t.pass(businessLogicIsCorrect(), "Business logic rules works")
next()
}
)
这通常可以简化测试并且速度更快。