我有一个使用 Dojo 在页面之间导航的单页应用程序。我正在使用实习生编写一些功能测试,并且我正在尝试清除一些琐碎的问题。具体来说,我很难让实习生处理超时。超时似乎对我没有任何影响。我正在尝试使用“setPageLoadTimeout(30000)”设置初始加载超时,但这似乎被忽略了。我也称“setImplicitWaitTimeout(10000)”,但这似乎没有效果。
我遇到的主要问题是,在我的测试环境中,发送请求以及解析响应并将其注入 DOM 可能需要几秒钟。我能够解决这个问题的唯一方法是例如显式调用“sleep(3000)”,但这可能有点命中注定,有时 DOM 元素在我查询它们时还没有准备好。(如前所述 setImplicitWaitTimeout(10000) 似乎对我没有影响)
使用该应用程序,当 DOM 更新时,我会触发一个事件。我使用 dojo.subscribe 在应用程序中挂钩。是否可以在实习生中使用 dojo.subscribe 来控制我的测试的执行?
这是我的代码示例。我还应该提到我使用 Dijit,所以当响应返回并且正在创建小部件(通过 data-dojo-type 声明)时也会有轻微的延迟......
define([
'intern!object',
'intern/chai!assert',
'require',
'intern/node_modules/dojo/topic'
], function (registerSuite, assert, require, topic) {
registerSuite({
name: 'Flow1',
// login to the application
'Login': function(remote) {
return remote
.setPageLoadTimeout(30000)
.setImplicitWaitTimeout(10000)
.get(require.toUrl('https://localhost:8080/'))
.elementById('username').clickElement().type('user').end()
.elementById('password').clickElement().type('password').end()
.elementByCssSelector('submit_button').clickElement().end();
},
// check the first page
'Page1':function() {
return this.remote
.setPageLoadTimeout(300000) // i've tried these calls in various places...
.setImplicitWaitTimeout(10000) // i've tried these calls in various places...
.title()
.then(function (text) {
assert.strictEqual(text, 'Page Title');})
.end()
.active().type('test').end()
.elementByCssSelector("[title='Click Here for Help']").clickElement().end()
.elementById('next_button').clickElement().end()
.elementByCssSelector("[title='First Name']").clear().type('test').end()
.elementByCssSelector("[title='Gender']").clear().type('Female').end()
.elementByCssSelector("[title='Date Of Birth']").type('1/1/1980').end()
.elementById('next_button').clickElement().end();
},
// check the second page
'Page2':function() {
return this.remote
.setImplicitWaitTimeout(10000)
.sleep(2000) // need to sleep here to wait for request & response injection and DOM parsing etc...
.source().then(function(source){
assert.isTrue(source.indexOf('test') > -1, 'Should contain First Name: "test"');
}).end()
// more tests etc...
}
});
});
我正在从实习生 dojo 节点模块导入相关的 Dojo 模块,但我不确定如何使用它。
谢谢