ไม้โปรแทรกเตอร์ - ไม่สามารถอ่านคุณสมบัติ '$$testability' ของไม่ได้กำหนด

ฉันได้รับข้อผิดพลาดซึ่งอ่านว่า:

"Error while waiting for Protractor to synce with the page: "Cannot read property '$$testability' of undefined"

ด้านล่างคือการทดสอบของฉัน

describe('On the MyMoments page', function(){  

    beforeEach(function() {
        var editLocationText = 'Location';

        browser.driver.get('http://192.168.0.6:8100/#/page1/myMoments');
    });

    it('The edit button should work', function() {
        browser.driver.get('http://192.168.0.6:8100/#/page1/myMoments').then(function() {
            // browser.waitForAngular();
            browser.getCurrentUrl().then(function(url) {

            });
        });


    });
});

นี่คือไฟล์ปรับแต่งของฉัน:

exports.config = {  
    capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {                
            args: ['--disable-web-security']
        } 
    },
    baseUrl: 'http://192.168.0.6:8100',
    specs: [
    '*.test.js'
    ],
    jasmineNodeOpts: {
        isVerbose: true,
    }
};

ฉันไม่คิดว่านี่เกี่ยวข้องกับการทดสอบของฉันเนื่องจากการทดสอบของฉันง่ายมาก มีใครเคยประสบปัญหานี้มาก่อนหรือไม่? ฉันติดขัดนิดหน่อย

ขอบคุณ.

แก้ไข:

ปรับลดรุ่น Protractor ของฉันเป็น 4.0.14 เพื่อแก้ไขข้อผิดพลาดนี้ ตอนนี้ฉันได้รับ:

"Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability/http://errors.angularjs.org/1.5.3/ng/test"

หากใครรู้ว่าสิ่งนี้คืออะไรหรือจะแก้ไขปัญหานี้ได้อย่างไร โปรดแจ้งให้เราทราบ!

ขอบคุณ.


person MatTaNg    schedule 10.05.2017    source แหล่งที่มา


คำตอบ (4)


นี่เป็นปัญหาที่ทราบแล้วใน Protractor ดูที่นี่ ดังที่กล่าวไว้ในปัญหานี้เป็นเพราะ browser.angularAppRoot() คาดว่าจะส่งคืนค่าปัจจุบันของรูทแอปหากไม่มีการส่งค่าไป แต่ปัจจุบันส่งคืนไม่ได้กำหนด มีรุ่นใหม่ออกมาซึ่งควรแก้ไขปัญหานี้

หวังว่ามันจะช่วยได้

person wswebcreation    schedule 10.05.2017
comment
มีวิธีแก้ไขชั่วคราวหรือไม่? การทดสอบ Protractor ของฉันใช้งานไม่ได้จนกว่าจะออกมาพร้อมกับแพตช์นี้หรือไม่? - person MatTaNg; 10.05.2017
comment
ใช้ไม้โปรแทรกเตอร์เวอร์ชั่นไหนอยู่? บางทีคุณอาจดาวน์เกรดเวอร์ชันได้ (แพตช์หรือเวอร์ชันรอง) - person wswebcreation; 10.05.2017
comment
ฉันไปถึงเวอร์ชัน 4.0.14 และฉันเริ่มได้รับ Failed: Error while wait for Protractor to sync with the page: [ng:test] no injector found for element argument to getTestability/errors.angularjs.org/1.5.3/ng/test - person MatTaNg; 11.05.2017
comment
น่าแปลกที่ฉันเพิ่งอัปเกรด Protractor และ Selenium เพื่อแก้ไขข้อบกพร่องด้วย Firefox เวอร์ชันล่าสุด มันเป็นไปไม่ได้เลยที่จะหาชุดค่าผสมที่เหมาะสมเพื่อให้สิ่งนี้ดำเนินต่อไปได้.. - person Eric Soyke; 11.05.2017
comment
ข้อบกพร่องของ Protractor ได้รับการแก้ไขแล้วใน 5.1.2 หากคุณยังคงได้รับข้อผิดพลาดนี้ อาจเป็นเพราะปัญหาพื้นฐานอื่นที่ทำให้หน้าของคุณว่างเปล่าในขณะที่ไม้โปรแทรกเตอร์เห็น ดูคำตอบด้านล่าง - person emery; 11.10.2017

แม้ว่าบางครั้งจะมีสาเหตุมาจากเอกสารที่ไม่มีแท็ก html ในรูท แต่ "ไม่สามารถอ่านคุณสมบัติ '$$testability' จากไม่ได้กำหนด" มีแนวโน้มที่จะแสดงออกมาเป็นอาการของข้อผิดพลาดอื่นที่ทำให้ไม่สามารถโหลดหน้าเว็บได้ หรือการโต้ตอบใดๆ กับหน้าเว็บ ที่ไม่ได้โหลดด้วยเหตุผลใดก็ตาม

ลองใช้ browser.sleep เหนือบรรทัดที่เกิดข้อผิดพลาด เพื่อให้เวลาในการโหลดหน้าเว็บ

ส่วนคำสั่ง browser.ExpectedConditions ซึ่งมีจุดมุ่งหมายเพื่อรอเงื่อนไขเฉพาะอาจทำให้เกิดข้อผิดพลาดนี้ได้หากเพจไม่พร้อมสำหรับไม้โปรแทรกเตอร์

บางครั้ง ก็ไม่สามารถหลีกเลี่ยงการนอนหลับแบบฮาร์ดโค้ดได้

เพื่อวินิจฉัยและแก้ไข

  • วาง browser.enterRepl(); ลงในโค้ดก่อนบรรทัดที่ดูเหมือนว่าจะแสดงข้อผิดพลาด $$testability
  • หากข้อผิดพลาด $$testability ยังคงเกิดขึ้น ให้ย้าย browser.enterRepl(); ขึ้นมาสองสามบรรทัด
  • แต่ละครั้งที่ enterRepl() ถูกทริกเกอร์โดยไม่มีข้อผิดพลาด $$testability จากนั้นย้าย browser.enterRepl(); ลงหนึ่งบรรทัด
  • สุดท้ายนี้ เมื่อ enterRepl ถูกย้ายไปยังบรรทัดที่อยู่ด้านล่างบรรทัดที่ทำให้เกิดข้อผิดพลาด คุณอาจเห็นข้อความแสดงข้อผิดพลาดอื่นซึ่งมีความหมายมากกว่า
  • วาง browser.sleep() หรือโค้ดอื่นๆ เพื่อแก้ไขปัญหาเฉพาะของคุณก่อนหน้าบรรทัดที่ทำให้เกิดข้อผิดพลาดนั้น
person emery    schedule 10.10.2017

การเปลี่ยนเบราว์เซอร์จาก chrome เป็น firefox ได้ผลสำหรับฉัน

// conf.js
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
  capabilities: {
  'browserName': 'firefox'
},
specs: ['login-spec.js']
}
person SriBalaji P    schedule 04.10.2017

ฉันมีปัญหาเดียวกันกับแอป Angular hybrid ในกรณีของฉัน ปัญหาได้รับการแก้ไขแล้วหลังจากลบออก

rootElement: 'myRootElement'

จากการกำหนดค่า

person Koga    schedule 13.11.2018