2016-03-04 6 views
1

Какую функцию вы используете, чтобы подождать несколько секунд, прежде чем запускать следующий шаг в транспортир. У меня есть диапазон с текстом, и я хочу дождаться, когда текст будет изменен из внешнего источника, прежде чем я его снова проверю.подождите несколько секунд, прежде чем запускать следующий шаг. Protractor

HTML:

<div class="panel"> 
    <button type="submit" onclick="promptTransaction()">Load Transaction</button> 
    <button type="submit" onclick="handleMessage()">Post Message</button> 
    <select name="messageType" class="messageType"> 
     <option>Submit</option> 
     <option>Amount</option> 
    </select> 
    <div class="message-box"><b>Sending message to hosted page:</b><span class="message-out">waiting...</span></div> 
    <div class="message-box"><b>Receiving message from hosted page:</b><span class="message-in">waiting...</span></div> 
</div> 

так, когда я нажимаю кнопку «пост» сообщение, я должен получить новый текст от внешнего источника и изменить интервал с именем класса "сообщение-в.

В настоящее время мой тест выглядит следующим образом:

 element(by.cssContainingText('button','Post Message')).click().then(function() { 

      //WAIT FOR 10 seconds 

      element(by.css('.message-box .message-in')).getText().then(function (text) { 
       var response = JSON.parse(text); 

       expect(response.type).toBe('msax-cc-result'); 
       expect(response.value.Transaction).toBe('Tokenize'); 
       expect(response.value.CardToken).not.null(); 
      }) 
     }); 

Кроме того, в тексте результата, который возвращается из внешнего источника, я преобразовал его в объект JSON, но не может, так как есть «\» на нем есть способ удалить его, прежде чем преобразовать его в объект.

прошли данные:

{"type":"msax-cc-result","value":"{\"Transaction\":\"Tokenize\",\"CardToken\":\"ba9c609f-45fc-49aa-b8b2-ecaffbc56d43\"}"} 
+0

Возможный дубликат [В тесте для протранграфа есть способ подождать между тестовым прогоном] (http://stackoverflow.com/questions/25301587/in-protractor-test-is-there-a-way-to-wait -between тест-прогон) – SlashmanX

ответ

1

Обычно это browser.sleep(N), но, вообще говоря, не рекомендуется вводить задержки жёстко между действиями браузера. Лучшим механизмом является Explicit Wait - ожидание выполнения определенного условия на странице с использованием browser.wait(), который периодически проверяет состояние ожидаемого состояния до тех пор, пока не произойдет тайм-аут. По сравнению с browser.sleep(), browser.wait() прекратил бы ждать сразу после ожидания условие становится правдой.

Например, если вы знаете, что текст ждать, textToBePresentInElement должна соответствовать:

var EC = protractor.ExpectedConditions; 
var elm = $(".message-out"); 
browser.wait(EC.textToBePresentInElement(elm, "Some message"), 5000); 

Или, вы можете, например, ждать waiting... не должен присутствовать в элементе:

browser.wait(EC.not(EC.textToBePresentInElement(elm, "waiting...")), 5000); 

где 5000 - это таймаут в миллисекундах.

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