ไม้โปรแทรกเตอร์ - การดีบัก
ตอนนี้เราได้เห็นแนวคิดทั้งหมดของ 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
ดีบักเกอร์จะเริ่มทำงานหลังจากคำสั่งด้านบน