在量角器中运行下一步之前,您使用什么功能等待几秒钟。我有一个带有文本的跨度,我想在再次检查之前等待从外部源更改文本。
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>
所以当我点击“发布消息”时按钮,我应该从外部源接收新文本,并使用类名&#39; message-in&#39;更改范围。
目前,我的测试看起来像这样:
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对象,但是因为有一个&#39; \&#39;在它上面,有没有办法在将其转换为对象之前将其删除。
传递数据:
{"type":"msax-cc-result","value":"{\"Transaction\":\"Tokenize\",\"CardToken\":\"ba9c609f-45fc-49aa-b8b2-ecaffbc56d43\"}"}
答案 0 :(得分:7)
通常这是browser.sleep(N)
,但通常不建议在浏览器操作之间引入硬编码延迟。更好的机制是显式等待 - 等待使用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
是超时(以毫秒为单位)。