2013-11-26 18 views
5

Tôi đang viết các kiểm tra e2e bằng thước đo góc và tôi muốn kiểm tra xem một số giá trị trên trang có được tính chính xác hay không. Một cái gì đó rất đơn giản như thế này:Cách chuyển đổi lời hứa trong thước đo góc sang phao

var var1 = element(by.binding('var1')); 
var var2 = element(by.binding('var2')); 
var var3 = element(by.binding('var3')); 

expect(parseFloat(var1.getText())).toEqual(parseFloat(var2.getText()) + 
     parseFloat(var2.getText())); 

Tuy nhiên, do var1, var2 và var3 đều hứa hẹn, điều này không làm việc.

Có cách nào chuyển đổi đối tượng lời hứa thành chuỗi để tôi có thể thực hiện công việc trên không?

Trả lời

8

Vì lời hứa không đồng bộ, bạn không thể chuyển đổi chúng thành phao có chức năng đồng bộ. Vì vậy, bạn sẽ cần phải giải quyết chúng. Bạn có thể làm như thế này:

element(by.binding('var1').getText().then(function(text1) { 
    element(by.binding('var2').getText().then(function (text2) { 
    element(by.binding('var3').getText().then(function (text3) { 
     expect(parseFloat(text1)).toEqual(parseFloat(text2) + parseFloat(text3)); 
    }); 
    }); 
}); 
0

@jmr: những gì về việc sử dụng Chạy/WaitsFor cơ chế từ Jasmine ?, có vẻ như với tôi để được thêm một chút tiêu chuẩn:

var var1, var2, var2 = null; 

runs(function() { 
    element(by.binding('var1')).getText().then(function(value) { var1 = value; }); 
    element(by.binding('var2')).getText().then(function(value) { var2 = value; }); 
    element(by.binding('var3')).getText().then(function(value) { var3 = value; }); 
}); 

waitsFor(function(){ 
    return var1 !== null && var2 !== null && var3 !== null; 
}, 'The values were not filled', 750); 

runs(function() { 
    expect(parseFloat(var1.getText())). 
    toEqual(parseFloat(var2.getText()) + parseFloat(var2.getText())); 
}); 
+0

Điều đó có vẻ tốt. Có ai thử không? – ErichBSchulz

+0

@ ErichBShulz - bạn đã thử chưa? Nó có hoạt động không? – Brad8118

1

Tôi viết bài kiểm tra của tôi với mẫu sau:

var data = {}; 
element(by.binding('var1')).getText().then(function(value) { data.var1text = value; }); 
element(by.binding('var2')).getText().then(function(value) { data.var2text = value; }); 
element(by.binding('var3')).getText().then(function(value) { data.var3text = value; }); 
expect(parseFloat(data.var1text)).toEqual(parseFloat(data.var2text) + parseFloat(data.var3text)); 

Mẫu này khá ngắn và rõ ràng, và tất cả các giá trị từ lời hứa đều có sẵn để phân tích thêm.

+1

nếu .getText() mất một thời gian (thử với ví dụ .click() giữa các cuộc gọi), hàm expect() sẽ nhận các giá trị rỗng. Đây là một ví dụ tồi. –

0
var var1 = element(by.binding('var1')); 
var var2 = element(by.binding('var2')); 
var var3 = element(by.binding('var3')); 

var promises = [ 
    var1.getText(), 
    var2.getText(), 
    var3.getText() 
]; 

protractor.promise.all(promises).then(function(results) { 
    expect(parseFloat(results[0])) 
    .toEqual(parseFloat(results[1]) + parseFloat(results[2])); 
} 

Tìm thấy tại Selenium API. Lưu ý: mọi tài liệu này gọi qua số webdriver.particularFunction được gọi qua số protractor.particularFunction trong protractor.js

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