它在beforeEach块之前被调用Jasmin

时间:2019-02-28 10:31:45

标签: javascript jasmine protractor automated-tests

我遇到一个问题,在开始执行it块之前,在我的beforeEach块中我导航到特定的URL。但是,有时it块在beforeEach块导航到URL之前运行。这将导致找不到元素错误。我尝试添加完成的参数,但无济于事。任何帮助都非常感谢

  describe('Asset Manager [PREP]', function () {
    beforeAll( async function() {
      await Login.login( LOGIN.VALID.ADMIN.USERNAME,LOGIN.VALID.ADMIN.PASSWORD );})   

     beforeEach( async function() {
       await browser.get( browser.baseUrl + 'asset_manager/import' );
     });

  for ( ASSET in ASSET_MANAGER.REGRESSION_PREP.ASSETS ) {
   case_params( ASSET_MANAGER.REGRESSION_PREP.ASSETS[ASSET] );
  }

  function case_params( ASSET ) {
    it('Upload: '+ ASSET.UPLOAD_NAME + ' Asset' , async function () {
      let FTP = ASSET_MANAGER.REGRESSION_PREP.FTP
      expect( await GlobalLayoutHeader.getAppNameFromHeader() ).toBe( 'Asset Manager' );
      var ImportAssets = AssetManager.ImportAssets;

      await ImportAssets.importFTPAsset(
                                    FTP.SERVER,
                                    FTP.USERNAME,
                                    FTP.PASSWORD,
                                    ASSET.FILE_PATH,
                                    ASSET.IMAGE_PATH,
                                    ASSET.UPLOAD_NAME + ' [RegressionPrep]',
                                    ASSET.DESCRIPTION,
                                  );
  });
};

1 Asset Manager [PREP]
   √ Upload: Black Panther Asset (3 secs)
   × Upload: Incredibles 2 Asset (0.587 sec)
      - Failed: No element found using locator: By(css selector, #import_type)

2 个答案:

答案 0 :(得分:0)

您检查过吗,可能有错误。也许是失败了。

beforeEach( async function(done) {
  try {
    await browser.get( browser.baseUrl + 'asset_manager/import' );
    done()
  } catch(e) {
    done.fail(e)
  }
);

答案 1 :(得分:0)

似乎您正在使用的循环可能有问题。使用for in loop遍历元素时,应该已经将ASSET_MANAGER.REGRESSION_PREP.ASSETS中的值保存在ASSETS变量中。因此,当您致电

for(let ASSET in ASSET_MANAGER.REGRESSION_PREP.ASSETS){
    ASSET_MANAGER.REGRESSION_PREP.ASSETS[ASSET]
}

您实际上是在打电话

for(let i =0; i < ASSET_MANAGER.REGRESSION_PREP.ASSETS.length;i++){
    ASSET_MANAGER.REGRESSION_PREP.ASSETS[ASSET_MANAGER.REGRESSION_PREP.ASSETS[i]]
}

因此

可以实现相同的目的
for(let ASSET in ASSET_MANAGER.REGRESSION_PREP.ASSETS){
   ASSET
}

但是,这是一个较小的语法问题,而不是实际问题的原因。过去,我在循环中执行异步操作时遇到了一些问题,但对原因为何最不清楚。也就是说,您可以尝试将for in更改为以下内容,看看是否有帮助?

for (let i = 0; i < ASSET_MANAGER.REGRESSION_PREP.ASSETS.length; i++) {
    case_params(ASSET_MANAGER.REGRESSION_PREP.ASSETS[i]);
}