Tôi đã thấy nó rất nhiều lần mà mọi người đề nghị sử dụng:Trình duyệt.ignoreSynchronization trong thước đo góc là gì?
browser.ignoreSynchronization=true; // or false
Nhưng tôi không hiểu tại sao chúng ta cần nó?
Tôi đã thấy nó rất nhiều lần mà mọi người đề nghị sử dụng:Trình duyệt.ignoreSynchronization trong thước đo góc là gì?
browser.ignoreSynchronization=true; // or false
Nhưng tôi không hiểu tại sao chúng ta cần nó?
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
.
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.