2015-01-08 23 views
5

Tôi đang làm việc với thử nghiệm e2e. Tôi có một cửa sổ xác nhận không tồn tại trên trang cho đến khi tôi nhấp vào một nút. Khi cửa sổ bật lên xác nhận được tạo, tôi nhận được văn bản từ một phần tử ở đó.Jasmine 'mong đợi' chờ đợi một lời hứa kéo dài để giải quyết

Sau đó tôi nhấp vào nút OK làm cho cửa sổ bật lên xác nhận bị xóa khỏi DOM và cũng thêm phần tử mới vào DOM với giá trị tôi nhận được văn bản trước đó.

vấn đề là do getText() trả về lời hứa, bởi khi tôi so sánh phần tử đầu tiên không có trên màn hình và kiểm tra không thành công.

nếu tôi mong đợi trong khi cửa sổ bật lên xác nhận trên màn hình tôi có thể thấy văn bản của phần tử bật lên xác nhận.

Jasmine mong đợi() giải quyết lời hứa như thế nào?

cảm ơn trước

Trả lời

6

Một cái gì đó như thế này?

element(by.id('dangerous-activity')).click().then(function() { 
    element(by.id('confirmation-text')).getText().then(function (textToConfirm) { 
    element(by.id('confirm-button')).click().then(function() { 
     element(by.id('new-element')).getText().then(function (newText)) { 
     expect(newText).toBe(textToConfirm); 
     }); 
    }); 
    }); 
}); 

Ở đây tất cả lời hứa được giải quyết rõ ràng, vì vậy Jasmine không cần phải giải quyết bất kỳ lời hứa nào nữa.

Bạn có thể để giải quyết expect lời hứa new-element, thay thế hai dòng cuối bởi:

.... 
     expect(element(by.id('new-element')).getText()).toBe(textToConfirm); 
    .... 

Nhưng bạn không thể có được textToConfirm trong sự mong đợi đó, vì nó đã biến mất bởi sau đó khi bạn chỉ định.

+0

hi công trình này. tôi sử dụng một số hình thức khác nhau của giải pháp này và nó giải quyết được vấn đề. cảm ơn. –

3

này nên là cách đơn giản nhất để làm những gì bạn muốn:

$('#open-popup').click(); 
var textToConfirm = $('#popup-text').getText(); 
$('#confirm-button').click(); 
var newText = $('#new-element').getText(); 
expect(newText).toBe(textToConfirm); 

Chú giải này sẽ không làm việc:

$('#open-popup').click(); 
var textToConfirmElement = $('#popup-text'); 
$('#confirm-button').click(); 
var newText = $('#new-element').getText(); 
expect(newText).toBe(textToConfirmElement.getText()); 

vì ở đây bạn sẽ có được văn bản sau khi popup đã được đóng lại.

Các vấn đề liên quan