我正在尝试使用实习生js创建UI自动化测试,但是我在等待页面完全加载时遇到问题。我的代码在加载页面之前开始搜索元素。有人可以帮我解决这个问题。
我的代码:
define([
'intern!object',
'intern/chai!assert',
'Automation/ConfigFiles/dataurl',
'Automation/pages/login/loginpage',
'intern/dojo/node!fs',
'intern/dojo/node!leadfoot/helpers/pollUntil'
], function (registerSuite, assert,dataurl, LoginPage,fs,pollUntil) {
registerSuite(function () {
var loginPage;
var values;
return {
setup: function () {
var data = fs.readFileSync(loginpage, 'utf8');
json=JSON.parse(data);
console.log('###########Setting Up Login Page Test##########')
this.remote
.get(require.toUrl(json.locator.URL))
.then(pollUntil(this.remote.findById('uname').isDisplayed(),6000)// here i want to wait until page is loaded
.waitForDeletedByClassName('loading').end().sleep(600000)// here i want to wait until loading component is disappered
values = json.values;
loginPage = new LoginPage(this.remote,json.locator);
},
'successful login': function () {
console.log('##############Login Success Test############')
return loginPage
.login(values.unamevalue,values.pwdvalue)
},
// …additional tests…
};
});
});
我正在尝试使用pollUntil。但我不确定天气是否应该使用它。
答案 0 :(得分:0)
pollUntil
在这里使用是一件好事,但它看起来并不像是在等待轮询完成。您的setup
方法需要返回包含pollUntil
的命令链,以便Intern知道它需要等待,例如:
var setupPromise = this.remote
.get(require.toUrl(json.locator.URL))...
values = json.values;
loginPage = new LoginPage(this.remote, json.locator);
return setupPromise;
或者,您可以将您的LoginPage类传递给链:
var setupPromise = this.remote
.get(require.toUrl(json.locator.URL))...
values = json.values;
loginPage = new LoginPage(setupPromise, json.locator);
在这种情况下,实习生不会等待设置完成,但您的LoginPage代码将隐式等待setupPromise完成,然后再做其他事情。虽然这样可行,但意图并不像前面的例子那样清晰(例如,实习生应该等待一些设置过程在继续之前完成)。