从方法中删除browser.sleep()

问题描述 投票:0回答:2

目前,我正在使用量角器编写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();
    }
selenium-webdriver protractor
2个回答
0
投票

这是由于异步执行而引起的。我想这可以通过承诺来解决。可以请您尝试一下此代码段

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。


0
投票

最后,我设法添加了自定义的wait()。每次将文件添加到污染者时,都会显示“删除”图标。所以我最终创建了:

wait(){
  const ec = protractor.ExpectedConditions;
  var removeFileButton= element(by.id('trash-can'));
  browser.wait(ec.elementToBeClickable(removeFileButton), 3000);
}

而且有效!!!

© www.soinside.com 2019 - 2024. All rights reserved.