目前,我正在使用量角器编写e2e测试,以上传文件。我已经制定了一些方法,可以将文件添加到容器中,然后单击“上传”按钮后,文件将被上传。我的页面目标文件方法:
addCustom() {
const absolutePath = path.resolve(__dirname, 'pathCustom');
elem.all(by.css('csslocator').get(0).sendKeys(absolutePath);
browser.sleep(500);
}
addProd() {
const absolutePath = path.resolve(__dirname,'pathProd');
elem.all(by.css('csslocator').get(1).sendKeys(absolutePath);
browser.sleep(500);
}
addOrders() {
const absolutePath = path.resolve(__dirname, 'pathOrders');
elem.all(by.css('csslocator').get(2).sendKeys(absolutePath);
browser.sleep(500);
}
在规格文件中,我进行了测试:
it('should upload three .csv files', (done) => {
let upload = new UploadPageObjects();
upload.addCustom();
upload.addProd();
upload.addOrders();
upload.upload();
done();
expect(upload.confirmMessage.isDisplayed()).toBeTruthy();
});
如果执行测试时从方法中删除browser.sleep():
Three files added in one container
是否有办法从方法中删除browser.sleep()并避免行为不当?
upload() {
button = element.by(css('#upload-button');
browser.wait(ec.elementToBeClickable(button), timeout);
button.click();
browser.waitForAngular();
}
这是由于异步执行而引起的。我想这可以通过承诺来解决。可以请您尝试一下此代码段
addCustom() {
return new Promise((resolve, reject)={
const absolutePath = path.resolve(__dirname, 'pathCustom');
elem.all(by.css('csslocator').get(0).sendKeys(absolutePath);
// browser.sleep(500);
});
}
addProd() {
return new Promise((resolve, reject)={
const absolutePath = path.resolve(__dirname,'pathProd');
elem.all(by.css('csslocator').get(1).sendKeys(absolutePath);
// browser.sleep(500);
});
}
addOrders() {
return new Promise((resolve, reject)={
const absolutePath = path.resolve(__dirname, 'pathOrders');
elem.all(by.css('csslocator').get(2).sendKeys(absolutePath);
// browser.sleep(500);
});
}
并更新规格如下:
it('should upload three .csv files', (done) => {
let upload = new UploadPageObjects();
upload.addCustom().then(()=>{
upload.addProd().then(()=>{
upload.addOrders().then(()=>{
upload.upload();
done();
expect(upload.confirmMessage.isDisplayed()).toBeTruthy();
});
});
});
});
一旦解决了addCustom承诺,则addOrders承诺后跟addProd。
最后,我设法添加了自定义的wait()。每次将文件添加到污染者时,都会显示“删除”图标。所以我最终创建了:
wait(){
const ec = protractor.ExpectedConditions;
var removeFileButton= element(by.id('trash-can'));
browser.wait(ec.elementToBeClickable(removeFileButton), 3000);
}
而且有效!!!