การเขียนการทดสอบอัตโนมัติเป็นมากกว่าความหรูหราสำหรับทีมพัฒนาซอฟต์แวร์ที่มีความคล่องตัว เป็นความต้องการและเป็นเครื่องมือสำคัญในการค้นหาจุดบกพร่องอย่างรวดเร็วในช่วงแรกของวงจรการพัฒนาซอฟต์แวร์ เมื่อมีคุณลักษณะใหม่ที่ยังอยู่ในขั้นตอนการพัฒนานักพัฒนาสามารถเรียกใช้การทดสอบอัตโนมัติและดูว่าส่วนอื่น ๆ ของระบบได้รับผลกระทบจากการเปลี่ยนแปลงเหล่านั้นอย่างไร บทความนี้จะอธิบายวิธีเร่งความเร็วการทดสอบอัตโนมัติโดยใช้ Page Object model ใน ซีลีเนียม .
ผ่าน ทดสอบระบบอัตโนมัติ เป็นไปได้ที่จะลดต้นทุนในการแก้ไขข้อบกพร่องและนำการปรับปรุงโดยรวมมาสู่ไฟล์ การประกันคุณภาพซอฟต์แวร์ (QA) กระบวนการ ด้วยการทดสอบที่เหมาะสมนักพัฒนาจะได้รับโอกาสในการค้นหาและแก้ไขข้อบกพร่องก่อนที่จะถึง QA การทดสอบอัตโนมัติช่วยให้เราดำเนินการกรณีทดสอบและคุณลักษณะที่ถดถอยได้โดยอัตโนมัติ QAs วิธีนี้มีเวลามากขึ้นในการทดสอบส่วนอื่น ๆ ของแอปพลิเคชัน นอกจากนี้ยังช่วยในการรับประกันคุณภาพของผลิตภัณฑ์ในการเผยแพร่การผลิต ด้วยเหตุนี้เราจึงได้ผลิตภัณฑ์ที่มีความเสถียรมากขึ้นอย่างมีประสิทธิภาพและกระบวนการ QA ที่มีประสิทธิภาพมากขึ้น
แม้ว่าการเขียนการทดสอบอัตโนมัติอาจดูเหมือนเป็นเรื่องง่ายสำหรับนักพัฒนาและวิศวกร แต่ก็ยังมีความเป็นไปได้ที่จะจบลงด้วยการทดสอบที่ใช้งานได้ไม่ดีและค่าใช้จ่ายในการบำรุงรักษาโค้ดที่สูงในกระบวนการที่คล่องตัว การพยายามนำเสนอการเปลี่ยนแปลงหรือคุณสมบัติอย่างต่อเนื่องในโครงการพัฒนาที่คล่องตัวสามารถพิสูจน์ได้ว่ามีค่าใช้จ่ายสูงเมื่อมีการทดสอบ การเปลี่ยนองค์ประกอบหนึ่งบนหน้าเว็บที่การทดสอบ 20 รายการต้องอาศัยจะต้องใช้หนึ่งรายการเพื่อทำตามขั้นตอนการทดสอบ 20 ข้อเหล่านี้และอัปเดตแต่ละองค์ประกอบเพื่อปรับให้เข้ากับการเปลี่ยนแปลงที่เพิ่งนำมาใช้นี้ สิ่งนี้ไม่เพียง แต่จะใช้เวลานาน แต่ยังเป็นปัจจัยกระตุ้นที่ร้ายแรงเมื่อต้องใช้การทดสอบอัตโนมัติในช่วงต้น
แต่จะเกิดอะไรขึ้นถ้าเราสามารถทำการเปลี่ยนแปลงได้ในที่เดียวและให้ทุกขั้นตอนการทดสอบที่เกี่ยวข้องใช้มัน? ในบทความนี้เราจะดูการทดสอบอัตโนมัติในซีลีเนียมและวิธีที่เราสามารถใช้แบบจำลองของเพจออบเจ็กต์เพื่อเขียนกิจวัตรการทดสอบที่บำรุงรักษาได้และใช้ซ้ำได้
รูปแบบวัตถุหน้า เป็นรูปแบบการออกแบบออบเจ็กต์ในซีลีเนียมโดยที่หน้าเว็บจะแสดงเป็นคลาสและองค์ประกอบต่างๆบนเพจถูกกำหนดให้เป็นตัวแปรในคลาส การโต้ตอบกับผู้ใช้ที่เป็นไปได้ทั้งหมดสามารถนำไปใช้เป็นวิธีการในคลาส:
clickLoginButton(); setCredentials(user_name,user_password);
เนื่องจากวิธีการที่มีชื่อดีในชั้นเรียนนั้นอ่านง่ายจึงเป็นวิธีที่ยอดเยี่ยมในการใช้กิจวัตรการทดสอบที่อ่านได้และง่ายต่อการบำรุงรักษาหรืออัปเดตในอนาคต ตัวอย่างเช่น:
เพื่อรองรับรูปแบบของ Page Object เราใช้ เพจโรงงาน . Page Factory ใน Selenium เป็นส่วนขยายของ Page Object และสามารถใช้งานได้หลายวิธี ในกรณีนี้เราจะใช้ Page Factory เพื่อเริ่มต้นองค์ประกอบของเว็บที่กำหนดไว้ในคลาสของหน้าเว็บหรือ Page Objects
คลาสของเว็บเพจหรือออบเจ็กต์ของเพจที่มีองค์ประกอบของเว็บจำเป็นต้องเริ่มต้นโดยใช้ Page Factory ก่อนจึงจะสามารถใช้ตัวแปรองค์ประกอบเว็บได้ ซึ่งสามารถทำได้ง่ายๆโดยใช้ไฟล์ initElements ฟังก์ชันบน PageFactory:
LoginPage page = new LoginPage(driver); PageFactory.initElements(driver, page);
หรือง่ายกว่า:
LoginPage page = PageFactory.intElements(driver,LoginPage.class)
หรือภายในตัวสร้างคลาสของเว็บเพจ:
public LoginPage(WebDriver driver) { this.driver = driver; PageFactory.initElements(driver, this); }
Page Factory จะเริ่มต้นทุกๆ WebElement ตัวแปรที่มีการอ้างอิงถึงองค์ประกอบที่เกี่ยวข้องบนหน้าเว็บจริงตาม 'ตัวระบุตำแหน่ง' ที่กำหนดค่าไว้ ซึ่งทำได้โดยการใช้ @FindBy คำอธิบายประกอบ ด้วยคำอธิบายประกอบนี้เราสามารถกำหนดกลยุทธ์ในการค้นหาองค์ประกอบพร้อมกับข้อมูลที่จำเป็นสำหรับการระบุ:
@FindBy(how=How.NAME, using='username') private WebElement user_name;
ทุกครั้งที่มีการเรียกใช้เมธอดนี้ WebElement ตัวแปรไดรเวอร์จะพบมันในหน้าปัจจุบันก่อนจากนั้นจำลองการโต้ตอบ ในกรณีที่เราทำงานกับเพจธรรมดาเรารู้ว่าเราจะพบองค์ประกอบในหน้าทุกครั้งที่เราค้นหาและเรารู้ด้วยว่าในที่สุดเราจะออกจากหน้านี้และไม่กลับไปที่หน้านั้นเราสามารถแคช ช่องค้นหาโดยใช้คำอธิบายประกอบง่ายๆอื่น:
@FindBy(how=How.NAME, using='username') @CacheLookup private WebElement user_name;
คำจำกัดความทั้งหมดของตัวแปร WebElement นี้สามารถแทนที่ได้ด้วยรูปแบบที่กระชับกว่ามาก:
@FindBy(name='username') private WebElement user_name;
@FindBy คำอธิบายประกอบรองรับกลยุทธ์อื่น ๆ จำนวนหนึ่งที่ทำให้สิ่งต่างๆง่ายขึ้น:
id, name, className, css, tagName, linkText, partialLinkText, xpath
@FindBy(id='username') private WebElement user_name; @FindBy(name='passsword') private WebElement user_password; @FindBy(className='h3') private WebElement label; @FindBy(css=”#content”) private WebElement text;
เมื่อเริ่มต้นแล้วตัวแปร WebElement เหล่านี้สามารถใช้เพื่อโต้ตอบกับองค์ประกอบที่เกี่ยวข้องบนเพจได้ ตัวอย่างเช่นรหัสต่อไปนี้จะ:
แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบแอพมือถือ
user_password.sendKeys(password);
... ส่งลำดับการกดแป้นพิมพ์ที่กำหนดไปยังฟิลด์รหัสผ่านบนหน้าและเทียบเท่ากับ:
driver.findElement(By.name(“user_password”)).sendKeys(password);
เมื่อดำเนินการต่อไปคุณมักจะเจอสถานการณ์ที่คุณต้องหารายการองค์ประกอบบนหน้าเว็บและนั่นคือเมื่อ @FindBys มีประโยชน์:
@FindBys(@FindBy(css=”div[class=’yt-lockup-tile yt-lockup-video’]”))) private List videoElements;
รหัสด้านบนจะพบไฟล์ div องค์ประกอบที่มีชื่อคลาสสองชื่อ 'yt-lockup-tile' และ 'yt-lockup-video' เราสามารถทำให้สิ่งนี้ง่ายยิ่งขึ้นโดยแทนที่ด้วยสิ่งต่อไปนี้:
@FindBy(how=How.CSS,using='div[class=’yt-lockup-tile yt-lockup-video’]') private List videoElements;
นอกจากนี้คุณสามารถใช้ไฟล์ @FindAll กับหลาย ๆ @FindBy คำอธิบายประกอบเพื่อค้นหาองค์ประกอบที่ตรงกับตัวระบุตำแหน่งที่กำหนด:
@FindAll({@FindBy(how=How.ID, using=”username”), @FindBy(className=”username-field”)}) private WebElement user_name;
ตอนนี้เราสามารถแสดงหน้าเว็บเป็นคลาส Java และใช้ Page Factory เพื่อเริ่มต้น WebElement ตัวแปรได้อย่างง่ายดายถึงเวลาแล้วที่เราจะมาดูกันว่าเราจะเขียนการทดสอบซีลีเนียมแบบง่าย ๆ โดยใช้รูปแบบของ Page Object และ Page Factory ได้อย่างไร
สำหรับบทแนะนำแบบจำลอง Page Object ของเรามาให้นักพัฒนาสมัครใช้ ApeeScape โดยอัตโนมัติ ในการทำเช่นนั้นเราต้องทำตามขั้นตอนต่อไปนี้โดยอัตโนมัติ:
ไปที่ www.toptal.com
คลิกที่ปุ่ม 'สมัครเป็นนักพัฒนา'
ในหน้าพอร์ทัลก่อนอื่นให้ตรวจสอบว่าเปิดอยู่หรือไม่
คลิกที่ปุ่ม“ เข้าร่วม ApeeScape”
กรอกแบบฟอร์ม
ส่งแบบฟอร์มโดยคลิกที่ปุ่ม“ เข้าร่วม ApeeScape”
ดาวน์โหลดและติดตั้ง Java JDK
ดาวน์โหลดและติดตั้ง InteliJ Idea
สร้างโครงการ Maven ใหม่
ลิงก์“ Project SDK” กับ JDK ของคุณเช่นบน Windows“ C: Program Files Java jdkxxx”
ตั้งค่า groupId และ artifactId:
SeleniumTEST Test
junit junit ${junit.version} test org.seleniumhq.selenium selenium-firefox-driver ${selenium.version} org.seleniumhq.selenium selenium-support ${selenium.version} org.seleniumhq.selenium selenium-java ${selenium.version}
แทนที่เวอร์ชัน Selenium และ JUnit Version ด้วยหมายเลขเวอร์ชันล่าสุดที่สามารถพบได้โดยค้นหา JUnit Maven บน Google และบนไซต์ Selenium
ณ จุดนี้หากเปิดใช้งานการสร้างอัตโนมัติการอ้างอิงควรเริ่มดาวน์โหลดโดยอัตโนมัติ หากไม่เป็นเช่นนั้นเพียงแค่เปิดใช้งานปลั๊กอิน> ติดตั้ง> ติดตั้ง: ติดตั้งภายใต้แผง Maven Projects ทางด้านขวาของ IntelliJ Idea IDE ของคุณ
เมื่อโปรเจ็กต์ได้รับการบูตแล้วเราสามารถเริ่มสร้างแพ็คเกจทดสอบของเราได้ใน“ src / test / java” ตั้งชื่อแพ็กเกจว่า 'com.toptal' และสร้างแพ็กเกจเพิ่มเติมอีกสองแพ็กเกจ: 'com.toptal.webpages' และ 'com.toptal.tests'
เราจะเก็บคลาส Page Object / Page Factory ไว้ภายใต้“ com.toptal.webpages” และขั้นตอนการทดสอบภายใต้“ com.toptal.tests”
กรณีทดสอบหน่วยใน java
ตอนนี้เราสามารถเริ่มสร้างคลาสของ Page Object ได้แล้ว
สิ่งแรกที่เราต้องใช้คือสำหรับหน้าแรกของ ApeeScape (www.toptal.com) สร้างคลาสภายใต้“ com.toptal.webpages” และตั้งชื่อว่า“ HomePage”
package com.toptal.webpages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.How; import org.openqa.selenium.support.PageFactory; public class HomePage { private WebDriver driver; //Page URL private static String PAGE_URL='https://www.toptal.com'; //Locators //Apply as Developer Button @FindBy(how = How.LINK_TEXT, using = 'APPLY AS A DEVELOPER') private WebElement developerApplyButton; //Constructor public HomePage(WebDriver driver){ this.driver=driver; driver.get(PAGE_URL); //Initialise Elements PageFactory.initElements(driver, this); } public void clickOnDeveloperApplyButton(){ developerApplyButton.click(); } }
ในหน้าแรกของ ApeeScape เราสนใจเกี่ยวกับองค์ประกอบหนึ่งเป็นพิเศษและนั่นคือปุ่ม“ สมัครเป็นนักพัฒนาซอฟต์แวร์” เราสามารถค้นหาองค์ประกอบนี้ได้โดยการจับคู่ข้อความซึ่งเป็นสิ่งที่เรากำลังทำข้างต้น ในขณะที่การสร้างแบบจำลองหน้าเว็บเป็นคลาสของ Page Object การค้นหาและระบุองค์ประกอบมักจะกลายเป็นงานที่น่าเบื่อ ด้วยเครื่องมือแก้ไขข้อบกพร่องของ Google Chrome หรือ Firefox สามารถทำให้ง่ายขึ้น เมื่อคลิกขวาที่องค์ประกอบใด ๆ ในหน้าคุณสามารถเปิดใช้งานตัวเลือก 'ตรวจสอบองค์ประกอบ' จากเมนูบริบทเพื่อดูข้อมูลโดยละเอียดเกี่ยวกับองค์ประกอบนั้น
วิธีหนึ่งทั่วไป (และฉันต้องการ) คือการค้นหาองค์ประกอบโดยใช้ Firefox ส่วนขยาย FireBug ร่วมกับโปรแกรมควบคุมเว็บ Firefox ในซีลีเนียม หลังจากติดตั้งและเปิดใช้งานส่วนขยาย FireBug คุณสามารถคลิกขวาที่หน้าและเลือก“ ตรวจสอบองค์ประกอบด้วย FireBug” เพื่อเปิด FireBug จากแท็บ HTML ของ FireBug คุณสามารถคัดลอก XPath, CSS Path, ชื่อแท็กหรือ 'Id' (ถ้ามี) ขององค์ประกอบใด ๆ ในหน้า
ด้วยการคัดลอก XPath ขององค์ประกอบในภาพหน้าจอด้านบนเราสามารถสร้างฟิลด์ WebElement สำหรับมันใน Page Object ของเราได้ดังนี้:
@FindBy(xpath = '/html/body/div[1]/div/div/header/div/h1') WebElement heading;
หรือเพื่อให้ง่ายเราสามารถใช้ชื่อแท็ก“ h1” ได้ที่นี่ตราบเท่าที่ระบุองค์ประกอบที่เราสนใจโดยไม่ซ้ำกัน:
@FindBy(tagName = 'h1') WebElement heading;
ต่อไปเราต้องการ Page Object ที่แสดงถึงหน้าพอร์ทัลนักพัฒนาซึ่งเราสามารถเข้าถึงได้โดยคลิกที่ปุ่ม 'สมัครเป็นนักพัฒนา'
ในหน้านี้เรามีสององค์ประกอบที่น่าสนใจ ในการตรวจสอบว่าหน้าเว็บโหลดหรือไม่เราต้องการตรวจสอบความมีอยู่ของหัวเรื่อง และเรายังต้องการ WebElement สำหรับปุ่ม“ เข้าร่วม ApeeScape”
package com.toptal.webpages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class DeveloperPortalPage { private WebDriver driver; @FindBy(xpath = '/html/body/div[1]/div/div/header/div/h1') private WebElement heading; @FindBy(linkText = 'JOIN TOPTAL') private WebElement joinApeeScapeButton; //Constructor public DeveloperPortalPage (WebDriver driver){ this.driver=driver; //Initialise Elements PageFactory.initElements(driver, this); } //We will use this boolean for assertion. To check if page is opened public boolean isPageOpened(){ return heading.getText().toString().contains('Developer portal'); } public void clikOnJoin(){ joinApeeScapeButton.click(); } }
และสุดท้ายสำหรับออบเจ็กต์หน้าที่สามและหน้าสุดท้ายสำหรับโปรเจ็กต์นี้เรากำหนดรายการที่แสดงถึงหน้าที่มีแบบฟอร์มแอปพลิเคชันสำหรับนักพัฒนา เนื่องจากเราต้องจัดการกับฟิลด์ฟอร์มจำนวนหนึ่งที่นี่เราจึงกำหนดฟิลด์หนึ่ง WebElement ตัวแปรสำหรับทุกฟิลด์ฟอร์ม เราค้นหาแต่ละฟิลด์ด้วย 'id' และเรากำหนดวิธีการ setter พิเศษสำหรับทุกฟิลด์ที่จำลองการกดแป้นพิมพ์สำหรับฟิลด์ที่เกี่ยวข้อง
package com.toptal.webpages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class DeveloperApplyPage { private WebDriver driver; @FindBy(tagName = 'h1') WebElement heading; @FindBy(id='developer_email') WebElement developer_email; @FindBy(id = 'developer_password') WebElement developer_password; @FindBy(id = 'developer_password_confirmation') WebElement developer_password_confirmation; @FindBy(id = 'developer_full_name') WebElement developer_full_name; @FindBy(id = 'developer_skype') WebElement developer_skype; @FindBy(id ='save_new_developer') WebElement join_toptal_button; //Constructor public DeveloperApplyPage(WebDriver driver){ this.driver=driver; //Initialise Elements PageFactory.initElements(driver, this); } public void setDeveloper_email(String email){ developer_email.clear(); developer_email.sendKeys(email); } public void setDeveloper_password(String password){ developer_password.clear(); developer_password.sendKeys(password); } public void setDeveloper_password_confirmation(String password_confirmation){ developer_password_confirmation.clear(); developer_password_confirmation.sendKeys(password_confirmation); } public void setDeveloper_full_name (String fullname){ developer_full_name.clear(); developer_full_name.sendKeys(fullname); } public void setDeveloper_skype (String skype){ developer_skype.clear(); developer_skype.sendKeys(skype); } public void clickOnJoin(){ join_toptal_button.click(); } public boolean isPageOpened(){ //Assertion return heading.getText().toString().contains('Apply to join our network as a developer'); } }
ด้วยคลาสของเพจออบเจ็กต์ที่แสดงเพจของเราและการโต้ตอบของผู้ใช้เป็นวิธีการตอนนี้เราสามารถเขียนรูทีนการทดสอบอย่างง่ายของเราเป็นชุดของการเรียกใช้เมธอดง่ายๆและการยืนยัน
package com.toptal.tests; import com.toptal.webpages.DeveloperApplyPage; import com.toptal.webpages.DeveloperPortalPage; import com.toptal.webpages.HomePage; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import java.net.URL; import java.util.concurrent.TimeUnit; public class ApplyAsDeveloperTest { WebDriver driver; @Before public void setup(){ //use FF Driver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void applyAsDeveloper() { //Create object of HomePage Class HomePage home = new HomePage(driver); home.clickOnDeveloperApplyButton(); //Create object of DeveloperPortalPage DeveloperPortalPage devportal= new DeveloperPortalPage(driver); //Check if page is opened Assert.assertTrue(devportal.isPageOpened()); //Click on Join ApeeScape devportal.clikOnJoin(); //Create object of DeveloperApplyPage DeveloperApplyPage applyPage =new DeveloperApplyPage(driver); //Check if page is opened Assert.assertTrue(applyPage.isPageOpened()); //Fill up data applyPage.setDeveloper_email(' [email protected] '); applyPage.setDeveloper_full_name('Dejan Zivanovic Automated Test'); applyPage.setDeveloper_password('password123'); applyPage.setDeveloper_password_confirmation('password123'); applyPage.setDeveloper_skype('automated_test_skype'); //Click on join //applyPage.clickOnJoin(); } @After public void close(){ driver.close(); } }
ณ จุดนี้โครงสร้างโครงการของคุณควรมีลักษณะดังนี้:
หากคุณต้องการเรียกใช้การทดสอบให้เลือก“ ApplyAsDeveloperTest” จากโครงสร้างคลิกขวาจากนั้นเลือก เรียกใช้ 'ApplyAsDeveloperTest' .
เมื่อทำการทดสอบแล้วคุณจะเห็นผลลัพธ์ที่มุมล่างซ้ายของ IDE ของคุณ:
Page Object และ Page Factory ทำให้ง่ายต่อการสร้างแบบจำลองหน้าเว็บใน Selenium และทดสอบโดยอัตโนมัติและทำให้ชีวิตของทั้งนักพัฒนาและ QAs ง่ายกว่ามาก เมื่อทำถูกต้องคลาสของ Page Object เหล่านี้สามารถใช้ซ้ำได้ในชุดทดสอบทั้งหมดของคุณและเพื่อให้ตัวเองมีโอกาสใช้การทดสอบซีลีเนียมอัตโนมัติสำหรับโครงการของคุณตั้งแต่เนิ่นๆโดยไม่กระทบต่อการพัฒนาที่คล่องตัว ด้วยการแยกการโต้ตอบของผู้ใช้ออกไปในโมเดลออบเจ็กต์หน้าของคุณและทำให้กิจวัตรการทดสอบของคุณมีน้ำหนักเบาและเรียบง่ายคุณสามารถปรับชุดทดสอบให้เข้ากับข้อกำหนดที่เปลี่ยนแปลงได้โดยใช้ความพยายามเพียงเล็กน้อย
ฉันหวังว่าฉันจะแสดงวิธีการเขียนโค้ดทดสอบที่ดีและสะอาดซึ่งดูแลรักษาง่ายได้ ฉันจะจบบทความด้วยใบเสนอราคา QA ที่ฉันชอบ:
ที่เกี่ยวข้อง: การขูดเว็บด้วยเบราว์เซอร์ที่ไม่มีหัว: บทแนะนำเกี่ยวกับหุ่นเชิดคิดสองครั้งรหัสครั้งเดียว!
Page Object model เป็นรูปแบบการออกแบบวัตถุในซีลีเนียม หน้าเว็บจะแสดงเป็นคลาสและองค์ประกอบบนเพจถูกกำหนดให้เป็นตัวแปรในคลาสดังนั้นการโต้ตอบของผู้ใช้จึงสามารถนำไปใช้เป็นวิธีการในคลาสได้
ซีลีเนียมได้รับการออกแบบมาเพื่อทำให้เว็บเบราว์เซอร์ทำงานโดยอัตโนมัติจึงช่วยให้วิศวกรซอฟต์แวร์สามารถเร่งความเร็วและทำการทดสอบอัตโนมัติได้อย่างมาก แม้ว่าการทดสอบอัตโนมัติจะเป็นการใช้งานหลัก แต่ซีลีเนียมยังสามารถใช้เพื่อทำให้การดำเนินการซ้ำ ๆ โดยอัตโนมัติเช่นงานการดูแลระบบขั้นพื้นฐาน
การทดสอบซีลีเนียมเป็นกระบวนการของการใช้ชุดเครื่องมือซอฟต์แวร์ซีลีเนียมเพื่ออำนวยความสะดวกในการทดสอบอัตโนมัติ ในกรณีส่วนใหญ่วิศวกรซอฟต์แวร์จะเลือกเครื่องมือ Selenium หนึ่งถึงสองชิ้นสำหรับงานนี้ แต่สามารถใช้เครื่องมือเพิ่มเติมเพื่อตอบสนองความต้องการที่แตกต่างกันได้
Page Object model เป็นรูปแบบการออกแบบตามที่อธิบายไว้ก่อนหน้านี้ในส่วนนี้ Page Factory ขยายฟังก์ชันการทำงานของโมเดล Page Object โดยการแนะนำคุณสมบัติขั้นสูงเพิ่มเติม ช่วยให้ผู้ใช้เริ่มต้นองค์ประกอบเฉพาะภายในรูปแบบของวัตถุหน้าโดยใช้คำอธิบายประกอบ