2

У меня есть модальный, который открывается, чтобы разрешить загрузку. Модаль имеет кнопку для многократных выгрузок, файл для загрузки, выгрузки, отмены и подтверждения (который вы нажимаете после выбора файла, нажатия кнопки загрузки, а затем выбора ok для возврата к предыдущему экрану). Все работает, но это не угловое приложение, поэтому он не ждет завершения загрузки, прежде чем выбрать ok. Я вставляю в browser.driver.sleep, который дает ему достаточно времени, но я знаю, что это ненадежное решение. Любые мысли о том, как ждать завершения загрузки, прежде чем выбрать ОК?Ждите завершения загрузки до нажатия кнопки

Тест Код:

this.selectsUploadButton = function() { 
    this.waitsForElementToBeClickable(uploadButton); 
    uploadButton.click().then(function() { 
     browser.driver.sleep(5000); 
     uploadButtonOkLogo.click(); 
    }); 
}; 

HTML-: Ошибка я получаю не кликабельны из-за наложения.

<div id="uploadLogoDialog" class="modal-dialog" style="display: block;"> 
 
    <div class="upload-overlay"></div> 
 
    <div class="upload-logo-container"> 
 
    <div class="upload-logo-header">Image must be under 50 MB and in the following formats: .JPG, .GIF, .PNG</div> 
 
    <div class="upload-logo-content"> 
 
     <div class="select-container"> 
 
     <button class="btn btn-select" data-bind="click: assosiateLogoImage"> 
 
      <span class="icon icon-select"></span> 
 
      <span class="label">Select file</span> 
 
     </button> 
 
     </div> 
 
     <button class="btn btn-upload" data-bind="click: startLogoUpload, disable: logo.isUploaded" disabled=""> 
 
     <button class="btn btn-ok" data-bind="click: closeUploadLogoDialog"> 
 
      <div class="upload-progress-container"> 
 
      <div class="upload-progress" style="display: none;" data-bind="visible: isUploading"> 
 
       <div class="progress-bar ui-progressbar ui-widget ui-widget-content ui-corner-all" data-bind="progressBar: { value: progressValue }" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"> 
 
       <div class="ui-progressbar-value ui-widget-header ui-corner-left" style="display: none; width: 0%;"></div> 
 
       </div> 
 
       <div class="percentage" data-bind="text: progressValue() + ' %'">0 %</div> 
 
      </div> 
 
      </div> 
 
      <form id="uploadForm" action="https://iplan.preview.s3.amazonaws.com/" enctype="multipart/form-data" target="uploadIFrame" method="post"> 
 
      <div class="file-input" data-bind="css: {'ie': isIE}"> 
 
       <input id="logoFile" type="file" data-bind="event:{ 'change': handleLogoSelection }" name="file"> 
 
      </div> 
 
      </form> 
 
    </div> 
 
    </div> 
 
    <div class="upload-busy" data-bind="visible: isUploading" style="display: none;"></div> 
 
</div>

+0

Есть ли уведомление, которое генерируется после завершения загрузки? Если это так, вы можете использовать его, чтобы подождать, пока на странице не появится уведомление. Или, если есть некоторая загрузка%, возможно, вы можете это использовать. Также вы можете обновить html-код и в своем вопросе? Спасибо –

+0

@Girish есть панель загрузки, и кнопка загрузки темнеть. –

+0

И что происходит, когда действие загрузки завершается? Разве это не уведомление? –

ответ

2

Лучший вариант здесь ждать, пока кнопка загрузки не получает disabled используя wait() функцию, которая транспортир имеет наряду с ExpectedConditions объекта. wait() Функция всегда ждет, пока данное условие не будет истинным, поэтому вы должны предоставить аргумент таким образом, чтобы после некоторого времени он стал истинным (что должно быть вашим желаемым значением). Вот как -

var EC = protractor.ExpectedConditions; 
browser.wait(EC.not(EC.elementToBeClickable(uploadButton)),10000).then(function(){ 
    uploadButtonOkLogo.click(); 
}); //Wait until element is not clickable (checks if element is enabled to decide if its clickable) 

В качестве альтернативы вы можете написать свой собственный ExpectedCondition пока элемент не включен, а затем использовать его в функцию ожидания. Вот как -

browser.wait(function(){ 
    return uploadButton.isEnabled().then(function(enabled){ 
     return enabled === false; // wait until element is disabled and if it is disabled then return true 
    }); 
}, 10000).then(function(){ 
    uploadButtonOkLogo.click(); 
}); 

Другой способ ждать, пока индикатор загрузки не достигнет 100% вручную писать собственные ExpectedCondition ждать. Вот как -

browser.wait(function(){ 
    return $('.percentage').getText().then(function(percent){ 
     return percent === '100 %'; //return true only if percentage is 100% 
    }); 
}, 10000).then(function(){ 
    uploadButtonOkLogo.click(); 
}); 

Надеюсь, это поможет.

+0

Это понравилось. Последний EC будет полезен –

Смежные вопросы