ไม้โปรแทรกเตอร์ - การดีบัก

ตอนนี้เราได้เห็นแนวคิดทั้งหมดของ Protractor ในบทก่อนหน้าแล้วให้เราเข้าใจแนวคิดการดีบักโดยละเอียดในบทนี้

บทนำ

การทดสอบแบบ end-to-end (e2e) นั้นยากที่จะแก้ไขข้อบกพร่องเนื่องจากขึ้นอยู่กับระบบนิเวศทั้งหมดของแอปพลิเคชันนั้น เราได้เห็นว่ามันขึ้นอยู่กับการกระทำต่างๆหรือโดยเฉพาะอย่างยิ่งเราสามารถพูดได้ว่าในการดำเนินการก่อนหน้านี้เช่นการเข้าสู่ระบบและบางครั้งก็ขึ้นอยู่กับการอนุญาต ความยากอีกประการหนึ่งในการดีบักการทดสอบ e2e คือการพึ่งพา WebDriver เนื่องจากทำหน้าที่แตกต่างกันไปตามระบบปฏิบัติการและเบราว์เซอร์ที่แตกต่างกัน สุดท้ายการดีบักการทดสอบ e2e ยังสร้างข้อความแสดงข้อผิดพลาดที่ยาวและทำให้ยากที่จะแยกปัญหาที่เกี่ยวข้องกับเบราว์เซอร์และทดสอบข้อผิดพลาดของกระบวนการ

ประเภทของความล้มเหลว

อาจมีสาเหตุหลายประการสำหรับความล้มเหลวของชุดทดสอบและสิ่งต่อไปนี้เป็นประเภทความล้มเหลวที่รู้จักกันดี -

WebDriver ล้มเหลว

เมื่อไม่สามารถดำเนินการคำสั่ง WebDriver มีข้อผิดพลาด ตัวอย่างเช่นเบราว์เซอร์ไม่สามารถรับที่อยู่ที่กำหนดหรือไม่พบองค์ประกอบตามที่คาดไว้

WebDriver ล้มเหลวโดยไม่คาดคิด

เบราว์เซอร์ที่ไม่คาดคิดและความล้มเหลวที่เกี่ยวข้องกับระบบปฏิบัติการเกิดขึ้นเมื่อไม่สามารถอัปเดตตัวจัดการโปรแกรมควบคุมเว็บ

ไม้โปรแทรกเตอร์ล้มเหลวสำหรับ Angular

ความล้มเหลวของ Protractor สำหรับ Angular เกิดขึ้นเมื่อ Protractor ไม่พบ Angular ในไลบรารีตามที่คาดไว้

ไม้โปรแทรกเตอร์ Angular2 ล้มเหลว

ในความล้มเหลวประเภทนี้ไม้โปรแทรกเตอร์จะล้มเหลวเมื่อไม่พบพารามิเตอร์ useAllAngular2AppRoots ในคอนฟิกูเรชัน เกิดขึ้นเนื่องจากหากไม่มีสิ่งนี้กระบวนการทดสอบจะดูองค์ประกอบรูทเดียวเดียวในขณะที่คาดหวังว่าจะมีองค์ประกอบมากกว่าหนึ่งในกระบวนการ

ไม้โปรแทรกเตอร์ล้มเหลวสำหรับการหมดเวลา

ความล้มเหลวประเภทนี้เกิดขึ้นเมื่อข้อกำหนดการทดสอบเข้าสู่ลูปหรือพูลยาวและไม่สามารถส่งคืนข้อมูลได้ทันเวลา

ความคาดหวังล้มเหลว

หนึ่งในความล้มเหลวในการทดสอบที่พบบ่อยที่สุดซึ่งแสดงให้เห็นว่าความล้มเหลวของความคาดหวังตามปกติมีลักษณะอย่างไร

เหตุใดการดีบักจึงมีความสำคัญในไม้โปรแทรกเตอร์

สมมติว่าหากคุณเขียนกรณีทดสอบแล้วและเกิดข้อผิดพลาดเป็นสิ่งสำคัญมากที่จะต้องทราบวิธีการดีบักกรณีทดสอบเหล่านั้นเพราะจะเป็นการยากมากที่จะหาตำแหน่งที่แน่นอนที่เกิดข้อผิดพลาด ในขณะทำงานกับไม้โปรแทรกเตอร์คุณจะได้รับข้อผิดพลาดที่ยาวเป็นแบบอักษรสีแดงในบรรทัดคำสั่ง

การหยุดชั่วคราวและการดีบักการทดสอบ

วิธีการดีบักใน Protractor มีอธิบายไว้ที่นี่ & miuns;

วิธีหยุดชั่วคราว

การใช้วิธีหยุดชั่วคราวเพื่อดีบักกรณีทดสอบในไม้โปรแทรกเตอร์เป็นวิธีที่ง่ายที่สุดวิธีหนึ่ง เราสามารถพิมพ์คำสั่งต่อไปนี้ในตำแหน่งที่เราต้องการหยุดรหัสทดสอบของเราชั่วคราว & miuns;

browser.pause();

เมื่อรหัสที่ทำงานอยู่ตรงกับคำสั่งด้านบนรหัสจะหยุดการทำงานของโปรแกรมที่จุดนั้นชั่วคราว หลังจากนั้นเราสามารถให้คำสั่งต่อไปนี้ตามความต้องการของเรา -

พิมพ์ C เพื่อก้าวไปข้างหน้า

เมื่อใดก็ตามที่คำสั่งหมดลงเราต้องพิมพ์ C เพื่อก้าวไปข้างหน้า หากคุณไม่พิมพ์ C การทดสอบจะไม่รันโค้ดเต็มและจะล้มเหลวเนื่องจากข้อผิดพลาดหมดเวลาจัสมิน

พิมพ์ repl เพื่อเข้าสู่โหมดโต้ตอบ

ประโยชน์ของโหมดโต้ตอบคือเราสามารถส่งคำสั่ง WebDriver ไปยังเบราว์เซอร์ของเราได้ หากเราต้องการเข้าสู่โหมดโต้ตอบก็พิมพ์repl.

พิมพ์ Ctrl-C เพื่อออกและดำเนินการทดสอบต่อ

สำหรับการออกจากการทดสอบจากสถานะหยุดชั่วคราวและดำเนินการทดสอบต่อจากจุดที่หยุดไปเราต้องพิมพ์ Ctrl-C

ตัวอย่าง

ในตัวอย่างนี้เรามีไฟล์ข้อมูลจำเพาะด้านล่างชื่อ example_debug.jsไม้โปรแทรกเตอร์พยายามระบุองค์ประกอบด้วยตัวระบุตำแหน่ง by.binding('mmmm') แต่ URL (https://angularjs.org/ หน้าไม่มีองค์ประกอบที่มีตัวระบุตำแหน่งที่ระบุ

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      element(by.model('yourName')).sendKeys('Vijay');
         //Element doesn't exist
         var welcomeText = 
         element(by.binding('mmmm')).getText();
         expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

ตอนนี้สำหรับการดำเนินการทดสอบข้างต้นเราจำเป็นต้องเพิ่มรหัส browser.pause () ซึ่งคุณต้องการหยุดการทดสอบชั่วคราวในไฟล์ข้อมูลจำเพาะด้านบน จะมีลักษณะดังนี้ -

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.pause();
      element(by.model('yourName')).sendKeys('Vijay');
      //Element doesn't exist
      var welcomeText = 
      element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

แต่ก่อนที่จะดำเนินการเราจำเป็นต้องทำการเปลี่ยนแปลงบางอย่างในไฟล์กำหนดค่าด้วย เรากำลังทำการเปลี่ยนแปลงต่อไปนี้ในไฟล์คอนฟิกูเรชันที่ใช้ก่อนหน้านี้ชื่อexample_configuration.js ในบทที่แล้ว -

// An example configuration file.
exports.config = {
   directConnect: true,

   // Capabilities to be passed to the webdriver instance.
   capabilities: {
      'browserName': 'chrome'
   },

   // Framework to use. Jasmine is recommended.
   framework: 'jasmine',

   // Spec patterns are relative to the current working directory when

   // protractor is called.
   specs: ['example_debug.js'],
      allScriptsTimeout: 999999,
      jasmineNodeOpts: {
      defaultTimeoutInterval: 999999
   },
   onPrepare: function () {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(5000);
   }
};

ตอนนี้เรียกใช้คำสั่งต่อไปนี้ -

protractor example_configuration.js

ดีบักเกอร์จะเริ่มทำงานหลังจากคำสั่งด้านบน

วิธีการดีบักเกอร์

การใช้วิธีหยุดชั่วคราวเพื่อดีบักกรณีทดสอบใน Protractor เป็นวิธีขั้นสูงเล็กน้อย เราสามารถพิมพ์คำสั่งต่อไปนี้ในสถานที่ที่เราต้องการทำลายรหัสทดสอบของเรา -

browser.debugger();

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

protractor debug protractor.conf.js

ในวิธีนี้เราต้องพิมพ์ C ในเทอร์มินัลเพื่อดำเนินการต่อรหัสทดสอบ แต่ตรงข้ามกับวิธีหยุดชั่วคราวในวิธีนี้จะต้องพิมพ์เพียงครั้งเดียว

ตัวอย่าง

ในตัวอย่างนี้เราใช้ไฟล์ข้อมูลจำเพาะเดียวกันชื่อ bexample_debug.jsใช้ข้างต้น ข้อแตกต่างเพียงอย่างเดียวคือแทนที่จะเป็นbrowser.pause()เราจำเป็นต้องใช้ browser.debugger()ที่เราต้องการทำลายรหัสทดสอบ จะมีลักษณะดังนี้ -

describe('Suite for protractor debugger',function(){
   it('Failing spec',function(){
      browser.get("http://angularjs.org");
      browser.debugger();
      element(by.model('yourName')).sendKeys('Vijay');
      //Element doesn't exist
      var welcomeText = element(by.binding('mmmm')).getText();
      expect('Hello '+welcomeText+'!').toEqual('Hello Ram!')
   });
});

เรากำลังใช้ไฟล์กำหนดค่าเดียวกัน example_configuration.jsใช้ในตัวอย่างข้างต้น

ตอนนี้รันการทดสอบไม้โปรแทรกเตอร์ด้วยตัวเลือกบรรทัดคำสั่งดีบักต่อไปนี้

protractor debug example_configuration.js

ดีบักเกอร์จะเริ่มทำงานหลังจากคำสั่งด้านบน