2016-05-26 14 views
12

Có câu hỏi khác về SO với cùng một vấn đề, nhưng các giải pháp đã không làm việc cho tôi. Đây spec.js tôing: kiểm tra không tìm thấy bộ phun cho đối số phần tử để getTestability

describe('Protractor Demo App', function() { 
    it('should have a title', function() { 
    browser.driver.get('http://rent-front-static.s3-website-us-east-1.amazonaws.com/'); 

    expect(browser.getTitle()).toEqual('How It Works'); 
    }); 
}); 

Và đây conf.js tôi

exports.config = { 
    framework: 'jasmine', 
    rootElement: 'body', 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['spec.js'] 
} 

Vì vậy, khi tôi cố gắng để chạy im thử nghiệm của tôi nhận được lỗi

Message: 
    Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.5.0/ng/test" 
    Stack: 
    Error: Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.5.0/ng/test" 
     at C:\Users\ShapeR\PycharmProjects\ratest\node_modules\jasminewd2\index.js:101:16 
     at Promise.invokeCallback_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:1329:14) 
     at TaskQueue.execute_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:2790:14) 
     at TaskQueue.executeNext_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:2773:21) 

1 spec, 1 failure 

Tôi có một bootstrapping thủ công cho phần tử body và đặt rootElement thành body trong config, nhưng nó không giúp được gì. Tôi thậm chí đã cố gắng để loại bỏ nâng cấp bằng tay và chỉ cần thêm ng-app = 'rentapplicationApp' vào phần tử cơ thể, nhưng nó không thay đổi gì, vẫn là lỗi tương tự.

Vậy có gì sai?

+1

Tôi cho rằng ứng dụng "được khởi động thủ công" vẫn khó khăn để được đồng bộ hóa với thước đo góc. Bạn có ổn không khi chỉ tắt đồng bộ hóa với 'browser.ignoreSynchronization = true'? – alecxe

+0

Ngoài ra, hãy thử thay thế '$ timeout' bằng' $ interval' bất cứ nơi nào bạn sử dụng nó. Sau đó, khởi động ứng dụng thường xuyên với 'ng-app' được định nghĩa trên' body'. Vẫn còn vấn đề tương tự? – alecxe

+0

@alecxe Yep, như tôi đã nói thay thế bootstrapping thủ công bằng ng-app không thay đổi gì cả. Thay thế $ timeout với $ interval cũng không thay đổi gì cả. ignoreSynchronization = true thực hiện công việc kiểm tra đơn giản này, nhưng tôi không thực sự nghĩ giải pháp của nó, vì từ những gì im đọc trong http://www.protractortest.org/#/timeouts nó được sử dụng cho các trang không có góc cạnh, vì vậy tôi đoán các tính năng thước đo khác sẽ không làm việc với nó .. – Aldarund

Trả lời

0

Sự cố trong quá trình khởi động ứng dụng của tôi. Đối với một số lý do nó không hoạt động với thẻ ng-app. Giải pháp duy nhất làm việc là bootstrap tay nó

angular.bootstrap(document, ["rentapplicationApp"]); 

Và đầu tiên tranh luận nên có nút dom, không phải là một chuỗi, giống như nó đang ở trong trường hợp của tôi, mặc dù với chuỗi ứng dụng sẽ làm việc, nhưng getTestability sẽ thất bại.

1

Giá trị cốt lõi của thước đo góc là nó quản lý tải góc cho bạn, bao gồm cả đồng bộ hóa, vì vậy bạn rất đúng khi không muốn sử dụng: browser.ignoreSynchronization = true.

Thông báo lỗi bạn nhận được là thước đo góc không thể định vị góc để đồng bộ hóa. Điều này là do sự kết hợp của hai vấn đề:

  • Các trang web là chưa sẵn sàng, góc cạnh không được tải
  • Đó là không có khả năng xác định vị trí ng ứng dụng, dù chỉ một lần trang web được tải

Thứ nhất, từ Protractor setup page.

Nếu trang của bạn không khởi động thủ công Thước đo góc sẽ không thể tải trang của bạn bằng browser.get. Thay vào đó, hãy sử dụng cá thể trình duyệt web cơ sở - browser.driver.get. Điều này có nghĩa là thước đo góc không biết khi nào trang của bạn được tải đầy đủ và bạn có thể cần thêm câu lệnh chờ để đảm bảo kiểm tra của bạn tránh điều kiện cuộc đua.

Giải pháp 1

Thêm một tuyên bố wait.

Giải pháp 2

Nếu bạn không có một lý do chính đáng cho tay bootstrapping, hoặc không muốn đợi:

  • Dừng tay bootstrapping ứng dụng
  • Sử dụng browser.get trên browser.driver.get
+0

Cảm ơn bạn đã trả lời nhưng. Giải pháp 2 không hoạt động. tôi đã thử cả driver.get và browser.get - không thay đổi gì cả. Và tôi đã thử nó mà không cần bootstrapping thủ công, cùng một lỗi. Giải pháp 1 cũng không hoạt động. Tôi thậm chí đã cố gắng thêm browser.sleep trong 10 giây mà ứng dụng được tải cho chắc chắn. Vẫn lỗi tương tự. Xem đoạn mã này. http://pastebin.com/cK3HfB5w – Aldarund

1

[ng : Test] không có vòi phun tìm thấy cho lập luận yếu tố để getTestability

tôi nghi ngờ có một cái gì đó xảy ra với bản thân ứng dụng, cách nó được bootstrapped, vì Protractor thực sự tìm thấy phần tử gốc (bạn rõ ràng có thể thiết lập rootElement: "body.root" bên trong cấu hình của bạn), nhưng không thành công setup the injector cho phần tử gốc.

Tôi cố gắng tìm hiểu điều gì đang xảy ra từng bước - trước tiên, hãy thử chạy thử nghiệm thước đo góc đối với ứng dụng không được xây dựng bắt đầu trực tiếp từ nguồn để đảm bảo rằng đây không phải là webpack hoặc phần khác của xây dựng lỗi.

Sau đó, tôi sẽ thử nâng cấp lên 1.x Góc cạnh và Thước đo mới nhất (3.3.0 là phiên bản mới nhất).


Cách giải quyết đơn giản nhất tại thời điểm này sẽ được biến đồng bộ giữa thước đo và góc tắt, bằng cách sử dụng browser.ignoreSynchronization = true:

describe("Strange Protractor/Angular problem", function() { 
    beforeEach(function() { 
     browser.ignoreSynchronization = true; 
     browser.get("https://dl.dropboxusercontent.com/u/597502/vxcv/index.html"); 

     var elm = $(".navbar-brand"); 
     browser.wait(EC.presenceOf(elm), 5000); 
    }); 

    it("should have an expected title", function() { 
     expect($(".navbar-brand").getText()).toEqual('RENT APPLICATION'); 
    }); 
}); 

Tất nhiên, có những nhược điểm để phương pháp này - bạn sẽ phải sử dụng các cuộc gọi browser.wait ở đây và ở đó để giải quyết vấn đề về thời gian. Luồng thử nghiệm sẽ không tự nhiên và đơn giản như khi đồng bộ hóa được bật.

+0

Tôi không thể chạy chống lại không được xây dựng kể từ khi ứng dụng của tôi yêu cầu webpack, nếu không nó không phải trong điều kiện làm việc, Ngoài ra tôi sử dụng mới nhất góc 1.5.5 và thước đo 3.3.0. Didnt giúp đỡ. Nhưng ứng dụng của tôi hoạt động tốt, nó không có lỗi js, nó hoạt động. Chỉ có thước đo góc không thể kiểm tra nó. Nó không phải là một lỗi trong proctractor? Đối với đồng bộ hóa vô hiệu hóa - hơn toàn bộ điểm sử dụng thước đo góc bị mất cho tôi. – Aldarund

+0

@ Vâng, tôi hiểu rằng việc tắt đồng bộ hóa không phải là cách giải quyết mong muốn nhất ở đây. Tôi đã thử nhiều thứ cho đến bây giờ nhưng đã không quản lý để giải quyết nó với đồng bộ trên .. nó là loại một tình huống kỳ lạ tôi đã không bao giờ gặp phải trước khi thử nghiệm các ứng dụng khác với thước đo góc. Btw, tôi thấy lỗi js trên bảng điều khiển [ở đây] (https://dl.dropboxusercontent.com/u/597502/vxcv/index.html/). – alecxe

+0

@alexce ngươi có lỗi vì cors, chúng không xảy ra trong tình huống bình thường nhưng vẫn lỗi tương tự. Tôi đã mở một vé trong repo protractor nhưng nó đã được chỉ đóng mà không cần bất kỳ nhìn vào nó, bởi vì nó "yêu cầu hỗ trợ cho stackoverflow" ... – Aldarund

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