Tôi đang cố gắng để thực hiện các kịch bản thử nghiệm sau đây:trang Non-góc mở sau khi một nhấp chuột
- thực hiện một nhấp chuột vào một biểu tượng trên trang
- khẳng định có một cửa sổ trình duyệt mới mở (tab trong Chrome) và kiểm tra URL hiện tại
vấn đề là trang mở trong một cửa sổ trình duyệt mới là một trang phi góc khi trang chính tôi thực hiện cú nhấp chuột trong là một trang góc.
Đây là nỗ lực đầu tiên của tôi:
it("should show logo", function() {
var logo = scope.page.logo;
expect(logo.isDisplayed()).toEqual(true);
// opens a new page on click
logo.click().then(function() {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]).then(function() {
expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
});
// switch back to the main window
browser.switchTo().window(handles[0]);
});
});
});
mà không thành công với:
Error: Error while waiting for Protractor to sync with the page: "angular could not be found on the window"
đó là điều dễ hiểu.
nỗ lực thứ hai của tôi là để chơi xung quanh với ignoreSynchronization
boolean flag:
browser.ignoreSynchronization = true;
logo.click().then(function() {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]).then(function() {
expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
});
// switch back to the main window
browser.switchTo().window(handles[0]);
});
này thực sự làm cho pass này kiểm tra cụ thể mà không có bất kỳ lỗi, nhưng nó ảnh hưởng đến mọi thử nghiệm được thực hiện sau này, vì browser
là một đối tượng toàn cầu và được chia sẻ giữa các thử nghiệm - thước đo góc không còn đồng bộ với góc trên một trang kết quả thành tất cả các loại lỗi.
Tôi nên triển khai thử nghiệm như thế nào?
Là một workaround, tôi có thể thay đổi restartBrowserBetweenTests
setting để true
và thay đổi ignoreSynchronization
giá trị mà không cần bất kỳ vấn đề - nhưng nó chậm các bài kiểm tra một cách đáng kể.
Vâng, đặt nó ở cuối khối 'it' đôi khi làm việc đôi khi hoạt động, đôi khi không - hành vi trở nên không nhất quán. Tôi sẽ thử 'beforeEach' và' afterEach' và lấy lại cho bạn. Cảm ơn! – alecxe
Vâng, đặt 'ignoreSynchronization' trở lại thành' false' bên trong 'afterEach()' đã thực hiện thủ thuật! – alecxe