ถ้าใครได้ใช้ Robot กับ Selenium2Library จะพบว่าตัว Test Script ที่เราเขียนมานั้น ค่อนข้างจะดูแลยาก โดยเรามักเขียน script ไล่คำสั่งไปเรื่อยๆ หรืออย่างมากก็อาจสร้างเป็น resource file มาเก็บไว้ แต่ Selenium เองก็มีแนวคิดของ Page Object Pattern ซึ่งเป็นแนวคิดการจัดการความซักซ้อนของการที่เราต้องทำสอบ หน้า page จำนวนมากๆ ได้

แต่ปัญหามันอยู่ที่ Selenium2Library เองนั้น ไม่ได้ออกแบบตาม Page Object Pattern เราจึงจำเป็นต้องใช้วิธีเสมือนการสร้าง Page Object ขึ้นมาแทน ทำอย่างไรมาดูกันเลยครับ

เริ่มกันที่ Concept ของ Page Object Pattern

Page object คือ การสร้าง Class ที่ตอบสนองการทำงานในหน้าจอหนึ่งของ Application ที่เราต้องการเทส โดย Test Script จะทำการเรียกใช้งาน Class นี้ สำหรับการจัดการหน้าจอ หรือ เพจที่คุณต้องการจะเทส เช่น หาก Application เรามี SignIn Page เราก็จะสร้าง Page Object ชื่อ SignInPage ขึ้นมา และภายใต้ LoginPage Class ก็จะมี function ต่างๆที่เราจำเป็นต้องใช้ เช่น LoginValidUser

ตัวอย่าง Page Object Class

/**
 * Page Object encapsulates the Sign-in page.
 */
public class SignInPage {

        private Selenium selenium;

        public SignInPage(Selenium selenium) {
                this.selenium = selenium;
                if(!selenium.getTitle().equals("Sign in page")) {
                        throw new IllegalStateException("This is not sign in page");
                }
        }

        /**
         * Login as valid user
         *
         * @param userName
         * @param password
         * @return HomePage object
         */
        public HomePage loginValidUser(String userName, String password) {
                selenium.type("usernamefield", userName);
                selenium.type("passwordfield", password);
                selenium.click("sign-in");
                selenium.waitForPageToLoad("waitPeriod");

                return new HomePage(selenium);
        }
}

 

แล้วถ้าเราใช้ Robot + Selenium2Library ล่ะ

สำหรับ Robot เราสามารถเขียน Page Object เป็น python code ตรงๆได้เลยครับ แต่ถ้าเราไม่ถนัดเขียนโปรแกรม เราก็สามารถทำการจำลองการสร้าง Resource ให้ออกมาในลักษณะเดียวกับ Page Object Pattern ได้ครับ

ภาพรวมการใช้งาน Page Object Resources

โดยเราจะใช้วิธีการจับคู่ระหว่าง 1 robot resource file กับ 1 web page แทนที่จะเป็น 1 page object class กับ 1 web page ครับ

ตัวอย่าง SignInPage resource และ Keyword

ตัวอย่าง robot test scripts

 

แค่จัดกลุ่มของ Keyword ใหม่ การ maintain
ก็ง่ายขึ้นเป็นกองแล้วครับ

 

References:

บทความก่อนหน้านี้มาตั้งชื่อ Test case ให้เหมือนหน้าปกหนังสือกัน
บทความถัดไป7 วัน ใน Philippines กับภารกิจ Training Automated Test
Quality On Top