2015-03-02 23 views

Trả lời

62

Câu trả lời đơn giản là nó làm thước đo không chờ đợi lời hứa kiễu góc, chẳng hạn như những từ $http hoặc $timeout để giải quyết, mà bạn có thể muốn làm gì nếu bạn đang thử nghiệm hành vi trong $http hoặc $timeout (ví dụ, một "bốc "tin nhắn" hoặc thử nghiệm các trang hoặc trang không phải góc cạnh, chẳng hạn như trang đăng nhập riêng.

Ví dụ, để thử nghiệm một nút mà bộ nhắn tải trong một yêu cầu, bạn có thể thiết lập nó để true khi lấy một yếu tố + kiểm tra nội dung của nó

element(by.css('button[type="submit"]')).click(); 
browser.ignoreSynchronization = true; 
expect(element(by.css('.message')).getText().toBe('Loading...');  
browser.ignoreSynchronization = false; 
expect(element(by.css('.message')).getText().toBe('Loaded'); 

Một câu trả lời tham gia nhiều hơn được đó là đặt nó đến true có nghĩa là các bổ sung/tiêm tiếp theo cho luồng kiểm soát cũng không thêm browser.waitForAngular. Có những trường hợp khi hiểu biết về luồng điều khiển, và khi nào/làm thế nào những thứ được thêm vào/tiêm vào nó là quan trọng. Ví dụ nếu bạn đang sử dụng browser.wait để kiểm tra quy trình nhiều giai đoạn, chức năng được chuyển đến wait được đưa vào luồng kiểm soát sau khi phần còn lại của các chức năng trong thử nghiệm đã được thêm vào luồng điều khiển.

element(by.css('button[type="submit"]')).click(); 
browser.ignoreSynchronization = true; 
expect(element(by.css('.message')).getText().toBe('Stage 1'); 
browser.wait(function() { 
    // This function is added to the control flow after the final 
    // browser.ignoreSynchronization = false in the test 
    // so we need to set it again here 
    browser.ignoreSynchronization = true; 
    return element(by.cssContainingText('.message', 'Stage 2')).isPresent().then(function(isPresent) { 
    // Cleanup so later tests have the default value of false 
    browser.ignoreSynchronization = false; 
    return !isPresent; 
    }); 
}); 
expect(element(by.css('.message')).getText().toBe('Stage 2'); 
browser.ignoreSynchronization = false; 
expect(element(by.css('.message')).getText().toBe('Stage 3'); 

Một thay thế cho việc sử dụng browser.ignoreSynchronization là để truy cập API webdriver tiêu chuẩn trực tiếp

element(by.css('button[type="submit"]')).click(); 
expect(browser.driver.findElement(by.css('.message')).getText().toBe('Loading...');  
expect(element(by.css('.message')).getText().toBe('Loaded'); 

Sử dụng các phương pháp điều khiển trực tiếp để tìm ra các yếu tố có nghĩa là hệ thống sẽ cố gắng để tìm thấy chúng mà không cần chờ đợi bất kỳ liên tục $http yêu cầu hoàn tất, giống như cài đặt browser.ignoreSynchronization = true.

15

Cài đặt này kiểm soát liệu thước đo góc có nên đợi góc trên một trang hay không. Nó không phải là tài liệu đúng, nhưng đây là documentation string from the code:

/** 
    * If true, Protractor will not attempt to synchronize with the page before 
    * performing actions. This can be harmful because Protractor will not wait 
    * until $timeouts and $http calls have been processed, which can cause 
    * tests to become flaky. This should be used only when necessary, such as 
    * when a page continuously polls an API using $timeout. 
    * 
    * @type {boolean} 
    */ 

Nói cách khác, nếu bạn đang thử nghiệm chống lại một trang web không góc cạnh - thiết ignoreSynchronization thiết lập để true. Như một ví dụ thế giới thực, hãy xem một trong những thách thức mà tôi có khi mở một trang không góc cạnh từ một trang góc: Non-angular page opened after a click.

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