อะไรคือความท้าทายและข้อผิดพลาดทั่วไปของการใช้ Page Object Model และคุณจะเอาชนะมันได้อย่างไร

เผยแพร่แล้ว: 2023-11-27

รูปแบบการออกแบบซีลีเนียมเป็นที่รู้จักในชื่อ Page Object Model หรือ POM ซึ่งเกี่ยวข้องกับการสร้างที่เก็บอ็อบเจ็กต์เพื่อจัดเก็บและจัดเรียงองค์ประกอบและอ็อบเจ็กต์ของหน้า ในด้านระบบอัตโนมัติของเว็บ/มือถือ เป็นรูปแบบการออกแบบที่ใช้กันมาก การทดสอบอัตโนมัติของ Selenium ที่มีประสิทธิภาพสามารถช่วยให้คุณใช้ Page Object Model ได้อย่างมีประสิทธิภาพ

ด้วยการทำหน้าที่เป็นอินเทอร์เฟซสำหรับเพจที่กำลังทดสอบ POM จะลดความซับซ้อนและความซ้ำซ้อนในโค้ด ในขณะเดียวกันก็ปรับปรุงความสามารถในการขยายและการบำรุงรักษาสคริปต์ทดสอบ สำหรับทุกหน้าเว็บ เราสร้างไฟล์คลาสเพื่อลดความซับซ้อนของแนวคิด POM องค์ประกอบเว็บที่มีอยู่บนเว็บเพจและสามารถใช้โดยสคริปต์ทดสอบเพื่อทำงานต่างๆ มีอยู่ในไฟล์คลาส

ประโยชน์ของการใช้ Page Object Model

วิธีการที่แนะนำสำหรับการแก้ไขปัญหาที่อาจเกิดขึ้นระหว่างการนำเฟรมเวิร์กการทดสอบอัตโนมัติไปใช้คือ Page Object Model รายการสิทธิประโยชน์ที่มอบให้มีดังนี้:

  • POM ช่วยให้สามารถสร้างที่เก็บวัตถุที่อำนวยความสะดวกในการเพิ่ม ปรับเปลี่ยน และนำองค์ประกอบเว็บกลับมาใช้ใหม่ได้อย่างง่ายดาย ชื่อขององค์ประกอบเว็บและตัวระบุตำแหน่งเพื่อค้นหาในตำแหน่งเดียวกันทุกครั้งที่มีการตรวจสอบโค้ดจะอยู่ในที่เก็บอ็อบเจ็กต์นี้
  • ทุกหน้าเว็บจะแสดงเป็นคลาสที่แตกต่างกันใน POM หากหน้าเว็บมีองค์ประกอบเว็บเพิ่มเติม การเพิ่มองค์ประกอบเหล่านั้นก็ทำได้ง่ายเพียงแค่ไปที่ชั้นเรียนที่ใช้ชื่อเดียวกันกับหน้าเว็บนั้น ตัวอย่างเช่น: คุณสามารถค้นหาและเพิ่มองค์ประกอบเว็บใหม่ให้กับไฟล์ customerClass.java เพื่อเพิ่มลงในที่เก็บอ็อบเจ็กต์เพจลูกค้า เช่นเดียวกับการเปลี่ยนตัวระบุเมื่อใดก็ตามที่องค์ประกอบเว็บของหน้าเว็บเปลี่ยนแปลง
  • นอกจากนี้ ไม่มีสคริปต์ทดสอบรวมอยู่ในที่เก็บออบเจ็กต์ เรียกอ็อบเจ็กต์ใดๆ จากที่เก็บอ็อบเจ็กต์เฉพาะนั้นซึ่งจำเป็นในการสร้างสคริปต์ทดสอบ จนกว่าจะมีการใช้องค์ประกอบ มันจะไม่พบองค์ประกอบเว็บ เพื่อเพิ่มประสิทธิภาพสูงสุด การเริ่มต้นแบบ Lazy ช่วยให้เราสามารถเลื่อนการสร้างอ็อบเจ็กต์ออกไปได้ก่อนที่เราจะต้องการมัน เหตุผลหลักในการทำเช่นนี้ก็คือ หากคุณไม่ต้องการวัตถุ คุณสามารถหลีกเลี่ยงการสร้างวัตถุนั้นได้
  • การแบ่งส่วนฟิลด์แบบทีละหน้าช่วยให้คุณสร้างที่เก็บออบเจ็กต์ได้ ด้วยเหตุนี้ แอปพลิเคชันจึงมี Page Repository โดยแต่ละเพจจะอธิบายว่าเป็นคลาส Java อินเทอร์เฟซจะกำหนดฟิลด์ของเพจเป็นสมาชิก จากนั้นคลาสก็จะใช้อินเทอร์เฟซ
  • กระบวนการสร้างและสรุปทุกการกระทำหรือคุณลักษณะที่อาจดำเนินการบนเพจให้เป็นคลาสเดียวที่สร้างขึ้นสำหรับเพจนั้นโดยเฉพาะ เรียกว่า Functional Encapsulation ซึ่งช่วยให้ระบุและทำความเข้าใจช่วงของฟังก์ชันต่างๆ ที่มีอยู่ในแต่ละหน้าได้ง่ายขึ้น
  • การเปลี่ยนแปลงที่สำคัญใดๆ สามารถนำไปใช้งานได้อย่างง่ายดายโดยไม่ต้องมีการบำรุงรักษามากนัก เนื่องจากทั้งอินเทอร์เฟซและคลาสสามารถอัปเดตได้อย่างรวดเร็ว เนื่องจากลักษณะเชิงวัตถุ เฟรมเวิร์กจึงอาจสร้างโค้ดที่อ่านง่ายและเชื่อถือได้มากขึ้น ทำให้เป็นมิตรกับโปรแกรมเมอร์มากขึ้น
  • คุณลักษณะ Low Redundancy สามารถช่วยลดจำนวนการทำซ้ำโค้ดได้ POM อาจประสบความสำเร็จมากขึ้นโดยใช้โค้ดน้อยลงเมื่อสถาปัตยกรรมมีความละเอียดรอบคอบและมีการกำหนดไว้อย่างชัดเจน มีประสิทธิภาพและสามารถขยายได้: เหนือกว่าเทคนิคทางเลือกที่ขึ้นอยู่กับการตีความหรือการสร้างเอกสาร Excel สำหรับการทดสอบที่ขับเคลื่อนด้วยข้อมูลหรือคำหลัก

ข้อเสียของการใช้ Page Object Model

การพัฒนา Automation Framework จะต้องอาศัยความพยายามเริ่มต้นที่สำคัญเพื่อสร้าง Page Object Model (POM) สำหรับเว็บแอปพลิเคชันที่มีหลายเพจ แม้ว่านี่อาจเป็นงานใหญ่ แต่ก็แนะนำให้ดำเนินการควบคู่กับกระบวนการพัฒนาแอปพลิเคชัน

ถือเป็นข้อผิดพลาดร้ายแรงในการจ้างผู้ทดสอบที่ไม่มีประสบการณ์โดยคาดหวังว่าพวกเขาจะได้รับการฝึกอบรมในระหว่างการปรับใช้ เพื่อป้องกันฝันร้ายดังกล่าว จำเป็นต้องมีผู้ทดสอบที่เชี่ยวชาญทางเทคนิคและเข้าใจแนวทางปฏิบัติที่ดีที่สุดในการเขียนโปรแกรม ผู้ทดสอบที่ไม่มีทักษะจะต้องเข้าร่วม Training Boot Camp เพื่อเตรียมพร้อมสำหรับงานนี้

นอกจากนี้ เพื่อหลีกเลี่ยงช่องว่างใดๆ ในระยะหลังของการพัฒนา จำเป็นต้องกำหนดสถาปัตยกรรมของกรอบงานอย่างละเอียดและแม่นยำก่อนเริ่มการพัฒนา เนื่องจากทุกแอปพลิเคชันมีความแตกต่างกัน การปรับแต่งเฟรมเวิร์กระบบอัตโนมัติอย่างมากจึงอาจจำเป็นเพื่อตอบสนองความต้องการ

แทนที่จะเป็นโมเดลทั่วไป Automation Framework ที่พัฒนาโดยใช้เทคนิค POM ได้รับการปรับให้เหมาะกับการใช้งานโดยเฉพาะ มันไม่เหมือนกับเฟรมเวิร์กที่ขับเคลื่อนด้วยข้อมูลหรือคำหลักที่เป็นเฉพาะแอปพลิเคชัน

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

จากมุมมองของการบำรุงรักษา การเปลี่ยนแปลงที่นักพัฒนาทำกับหน้าเข้าสู่ระบบอาจส่งผลต่อการทดสอบที่เกี่ยวข้องโดยตรงกับการทำงานของการเข้าสู่ระบบ เนื่องจากการทดสอบที่เหลือใช้การเข้าสู่ระบบเพื่อทดสอบฟังก์ชันการทำงานที่แตกต่างกันเท่านั้น จึงไม่ได้รับผลกระทบจากการเปลี่ยนแปลงเหล่านี้ เพื่อรับประกันว่าการทดสอบที่เหลือจะไม่ได้รับผลกระทบ จำเป็นต้องตรวจสอบให้แน่ใจว่าคุณสมบัติการเข้าสู่ระบบทำงานได้อย่างถูกต้อง แม้ว่าองค์ประกอบอื่นๆ ของหน้าจะมีการเปลี่ยนแปลงก็ตาม

เป้าหมายหลักของกระบวนการทดสอบคือการปรับปรุงคุณภาพผลิตภัณฑ์ และการทดสอบอัตโนมัติถือเป็นสิ่งสำคัญในการบรรลุเป้าหมายนี้โดยการค้นหาและรายงานปัญหาไปยังทีมพัฒนา ความครอบคลุมของการทดสอบระบบอัตโนมัติเป็นตัวบ่งชี้ประสิทธิภาพหลัก (KPI) ที่สำคัญในการประเมินประสิทธิภาพของโค้ดทดสอบ โดยไม่คำนึงว่าจะปฏิบัติตามวิธีการพัฒนาซอฟต์แวร์หรือไม่

ข้อผิดพลาดทั่วไปของ POM

ต่อไปนี้คือปัญหาทั่วไปบางประการเกี่ยวกับ POM:

  • การสร้างกรอบการทำงานอัตโนมัติจะต้องใช้เวลาและความพยายามอย่างมากหากแอปพลิเคชันมีหน้าเว็บนับร้อยหรือหลายพันหน้า
  • เนื่องจากการบำรุงรักษาคลาสขนาดใหญ่เป็นการละเมิดหลักการออกแบบ ต้นทุนจึงเพิ่มขึ้นตามค่าใช้จ่ายในการบำรุงรักษา
  • ผู้ทดสอบควรตระหนักอย่างยิ่งเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดในการเขียนโปรแกรม เนื่องจากการสร้างเฟรมเวิร์ก POM สำหรับเพจจำนวนมากนั้นเทียบเท่ากับความพยายามของนักพัฒนา
  • โมเดลออบเจ็กต์ของเพจเป็นแบบเฉพาะแอปพลิเคชันและไม่ใช่แบบทั่วไป

จะเอาชนะข้อเสียของ POM ได้อย่างไร?

การปรับโครงสร้างแนวคิด POM ให้เป็นรูปแบบบทภาพยนตร์เป็นวิธีที่มีประสิทธิภาพที่สุดในการแก้ไขปัญหาข้างต้น หลักความรับผิดชอบเดี่ยวและหลักการเปิด-ปิด ซึ่งเป็นหลักการออกแบบ SOLID สองข้อแรก ทำหน้าที่เป็นรากฐานสำหรับรูปแบบบทภาพยนตร์ ซึ่งเป็นวิธีในการสร้างการทดสอบการยอมรับอัตโนมัติที่ยอดเยี่ยม ก่อนที่จะทำความเข้าใจรูปแบบบทภาพยนตร์ เรามาทบทวนหลักการ “SOLID” สองข้อแรกกันก่อน

  • หลักการความรับผิดชอบเดียวระบุว่าชั้นเรียนควรมีหน้าที่เดียวและไม่ควรมีหลายรายการ เพราะการเปลี่ยนหน้าที่หนึ่งอาจมีผลกระทบต่อหลายหน้าที่
  • คลาสใหม่ควรได้รับการพัฒนาเมื่อใดก็ตามที่มีความต้องการเพิ่มหรือแก้ไข แทนที่จะอัปเดตคลาสเก่าในคลาสที่มีอยู่ เนื่องจากการเปลี่ยนแปลงส่วนประกอบหนึ่งอาจทำให้เกิดการแก้ไขอื่นๆ ในกระบวนการได้ กระบวนการทั้งหมดเรียกว่าหลักการเปิด-ปิด

รูปแบบการออกแบบยอดนิยมสำหรับการทำงานอัตโนมัติของ QA คือ Page Object Model (POM) ช่วยคุณในการเขียนโค้ดที่นำมาใช้ใหม่และบำรุงรักษาได้สำหรับการทดสอบเว็บของคุณ

● ขั้นตอนที่เหมาะสมที่สุด POM

มีแนวทางปฏิบัติและกฎที่แนะนำที่คุณต้องปฏิบัติตามเพื่อรับประกันความสำเร็จของระบบอัตโนมัติ QA ด้วย POM ออบเจ็กต์เพจที่สร้างความสมดุลระหว่างขนาดและรูปร่างสามารถสร้างขึ้นได้โดยการปฏิบัติตามแนวคิดความรับผิดชอบเดียว ชื่อของเมธอด ตัวระบุตำแหน่ง และออบเจ็กต์เพจควรเป็นไปตามหลักการตั้งชื่อและเป็นคำอธิบาย นอกจากนี้ องค์ประกอบเว็บจะต้องถูกซ่อนจากมุมมองสาธารณะ และสามารถเข้าถึงได้ผ่านฟังก์ชันของออบเจ็กต์เพจเท่านั้น การใช้เฟรมเวิร์ก เช่น Selenium หรือ TestNG เพื่อใช้การออกแบบ Page Factory จะช่วยปรับปรุงโค้ดและเพิ่มประสิทธิภาพการทดสอบ

● คำแนะนำและวิธีการของ POM

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

ไม่เพียงแต่เป็นความหรูหราสำหรับทีมพัฒนาซอฟต์แวร์ที่คล่องตัวในการเขียนการทดสอบอัตโนมัติ แต่ยังเป็นข้อกำหนดอีกด้วย ในระหว่างกระบวนการพัฒนาคุณลักษณะใหม่ นักพัฒนาสามารถใช้การทดสอบอัตโนมัติเพื่อสังเกตว่าการเปลี่ยนแปลงส่งผลกระทบต่อส่วนอื่นๆ ของระบบอย่างไร นี่คือเวลาที่การทดสอบระบบอัตโนมัติสามารถมีบทบาทสำคัญได้

แพลตฟอร์มการทดสอบอัตโนมัติ เช่น LambdaTest มีความสำคัญอย่างยิ่งต่อการระบุข้อบกพร่องในขั้นตอนแรกของวงจรการพัฒนาซอฟต์แวร์โดยทันที LambdaTest ไม่เพียงแต่จะลดเวลาการดำเนินการทดสอบของคุณโดยการรันการทดสอบแบบคู่ขนานเท่านั้น แต่ยังช่วยปรับปรุงความครอบคลุมของเบราว์เซอร์ของคุณอีกด้วย ทำให้คุณสามารถเข้าถึงสภาพแวดล้อมการทดสอบมากกว่า 3,000 รายการ เช่น เบราว์เซอร์ Chrome และ Safari ทางออนไลน์

การประกันคุณภาพซอฟต์แวร์ (QA) สามารถปรับปรุงได้ และการแก้ปัญหาก็มีราคาถูกลงผ่านการทดสอบอัตโนมัติ เมื่อการทดสอบทำอย่างถูกต้อง นักพัฒนาสามารถระบุและแก้ไขข้อผิดพลาดก่อนที่ QA จะเห็น นอกจากนี้เรายังสามารถทำให้ฟีเจอร์การถดถอยและกรณีทดสอบเป็นแบบอัตโนมัติด้วยการใช้การทดสอบอัตโนมัติ วิศวกร QA จะมีเวลาเพิ่มเติมในการทดสอบส่วนอื่นๆ ของแอปพลิเคชัน นอกจากนี้ยังรับประกันคุณภาพของผลิตภัณฑ์สำหรับการเปิดตัวการผลิต เป็นผลให้เราได้รับผลิตภัณฑ์ที่มีเสถียรภาพและมีประสิทธิภาพมากขึ้นและวิธีการประกันคุณภาพที่มีประสิทธิภาพมากขึ้น

สำหรับนักพัฒนาและวิศวกร การพัฒนาการทดสอบอัตโนมัติอาจดูเหมือนเป็นการดำเนินการที่เรียบง่าย แต่ก็ยังมีโอกาสที่ผลลัพธ์จะเป็นการทดสอบที่มีโครงสร้างไม่ดีและโค้ดที่บำรุงรักษาได้ไม่ดี ในโครงการพัฒนาแบบ Agile การพยายามจัดส่งฟีเจอร์หรือการแก้ไขตลอดเวลาอาจมีราคาแพงเมื่อมีการทดสอบ หากองค์ประกอบหนึ่งบนเว็บเพจมีการเปลี่ยนแปลงและการทดสอบ 20 รายการขึ้นอยู่กับองค์ประกอบนั้น รูทีนการทดสอบทั้ง 20 รายการจะต้องได้รับการอัปเดตเพื่อแสดงองค์ประกอบใหม่ การดำเนินการนี้ใช้เวลานาน ซึ่งทำให้นักพัฒนาไม่สามารถทำการทดสอบอัตโนมัติโดยเร็วที่สุด

คำสุดท้าย

หนึ่งในรูปแบบการออกแบบที่โดดเด่นที่สุดใน Selenium Webdriver คือ Page Object Model (POM) ปัญหาการบำรุงรักษาสคริปต์และการทำซ้ำโค้ดที่เกิดขึ้นจากการทำให้เพจจำนวนมากบนเว็บไซต์และไซต์อีคอมเมิร์ซเป็นแบบอัตโนมัติได้รับการแก้ไขได้ดีที่สุดด้วยโมเดลนี้ POM ถูกใช้โดยการทดสอบอัตโนมัติเพื่อทำให้ไซต์อีคอมเมิร์ซเป็นอัตโนมัติเนื่องจากสคริปต์ของมันคือสคริปต์ได้

เมื่อรวมกับ Cucumber แล้ว POM สามารถใช้กับไซต์อีคอมเมิร์ซได้ ไม่เพียงแต่สำหรับการทดสอบการทำงานเท่านั้น แต่ยังรวมถึงการทดสอบการยอมรับด้วย POM ช่วยในการปรับปรุงความสามารถในการอ่าน การใช้ซ้ำ และการบำรุงรักษาโค้ด แต่ก็ยังทำให้เกิดปัญหาบางประการเช่นกัน

POM เป็นเครื่องมือที่เป็นประโยชน์สำหรับระบบอัตโนมัติของ QA แต่ก็มีข้อบกพร่องและปัญหาหลายประการที่ต้องแก้ไข การค้นหา Web Part อาจเป็นเรื่องที่ท้าทายและใช้เวลานาน และการรักษาวัตถุหน้าถือเป็นสิ่งจำเป็นเมื่อแอปพลิเคชันบนเว็บพัฒนาขึ้น นอกจากนี้ เนื่องจากออบเจ็กต์เพจอาจอาศัยองค์ประกอบอื่นๆ เช่น เบราว์เซอร์หรือสภาพแวดล้อม การจัดการการขึ้นต่อกันจึงเป็นสิ่งสำคัญ ต้องหลีกเลี่ยงการอ้างอิงแบบวงกลมหรือการเชื่อมโยงอย่างแน่นหนาระหว่างออบเจ็กต์หน้า