ซีลีเนียม - คู่มือฉบับย่อ

บทนำ

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

ตอนนี้ให้เราเข้าใจเครื่องมือแต่ละอย่างที่มีอยู่ในชุด Selenium และการใช้งาน

ซีเนียร์ เครื่องมือและคำอธิบาย
1

Selenium IDE

ซีลีเนียม Iบูรณาการ Dการพัฒนา Eสภาพแวดล้อม (IDE) คือปลั๊กอิน Firefox ที่ให้ผู้ทดสอบบันทึกการกระทำของตนเมื่อทำตามขั้นตอนการทำงานที่ต้องการทดสอบ

2

Selenium RC

ซีลีเนียม Rอีโมติคอน Control (RC) เป็นเฟรมเวิร์กการทดสอบเรือธงที่อนุญาตให้ใช้มากกว่าการทำงานของเบราว์เซอร์ธรรมดาและการดำเนินการเชิงเส้น ใช้ประโยชน์จากภาษาโปรแกรมอย่างเต็มที่เช่น Java, C #, PHP, Python, Ruby และ PERL เพื่อสร้างการทดสอบที่ซับซ้อนยิ่งขึ้น

3

Selenium WebDriver

Selenium WebDriver เป็นตัวต่อจาก Selenium RC ซึ่งส่งคำสั่งไปยังเบราว์เซอร์โดยตรงและดึงผลลัพธ์

4

Selenium Grid

Selenium Grid เป็นเครื่องมือที่ใช้ในการทดสอบแบบคู่ขนานในเครื่องต่างๆและเบราว์เซอร์ต่างๆพร้อมกันซึ่งส่งผลให้ลดเวลาในการดำเนินการ

ข้อดีของซีลีเนียม

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

ซีลีเนียม QTP
ซีลีเนียมเป็นเครื่องมือโอเพนซอร์ส QTP เป็นเครื่องมือทางการค้าและมีค่าใช้จ่ายที่เกี่ยวข้องกับใบอนุญาตแต่ละใบ
สามารถขยายได้สำหรับเทคโนโลยีต่างๆที่เปิดเผย DOM ส่วนเสริมที่ จำกัด และต้องการส่วนเสริมสำหรับแต่ละเทคโนโลยี
มีความสามารถในการเรียกใช้สคริปต์ในเบราว์เซอร์ต่างๆ สามารถทำการทดสอบใน Firefox, IE และ Chrome บางเวอร์ชันได้
สามารถรันสคริปต์บนระบบปฏิบัติการต่างๆ ใช้งานได้กับ Windows เท่านั้น
รองรับอุปกรณ์มือถือ รองรับอุปกรณ์มือถือด้วยความช่วยเหลือของเครื่องมือของบุคคลที่สาม
ดำเนินการทดสอบภายในเบราว์เซอร์ดังนั้นจึงไม่จำเป็นต้องโฟกัสในขณะที่กำลังดำเนินการสคริปต์ ต้องการโฟกัสระหว่างการเรียกใช้สคริปต์เนื่องจากเครื่องมือทำงานบนเบราว์เซอร์ (เลียนแบบการกระทำของผู้ใช้)
สามารถทำการทดสอบควบคู่ไปกับการใช้ Selenium Grids QTP ไม่สามารถทำการทดสอบพร้อมกันได้อย่างไรก็ตามการรวม QTP เข้ากับ QC ทำให้ผู้ทดสอบสามารถดำเนินการแบบขนานได้ QC ยังเป็นเครื่องมือทางการค้า

ข้อเสียของซีลีเนียม

ตอนนี้ให้เราพูดถึงข้อผิดพลาดของซีลีเนียมผ่าน QTP

ซีลีเนียม QTP
รองรับเฉพาะแอปพลิเคชันบนเว็บ สามารถทดสอบทั้งแอปพลิเคชันเว็บและเดสก์ท็อป
ไม่มีคุณลักษณะเช่น Object Repository / Recovery Scenario QTP มีที่เก็บอ็อบเจ็กต์ในตัวและสถานการณ์การกู้คืน
ไม่มี IDE ดังนั้นการพัฒนาสคริปต์จะไม่เร็วเท่า QTP IDE ที่ใช้งานง่ายมากขึ้น ระบบอัตโนมัติสามารถทำได้เร็วขึ้น
ไม่สามารถเข้าถึงการควบคุมภายในเบราว์เซอร์ สามารถเข้าถึงการควบคุมภายในเบราว์เซอร์เช่นแถบรายการโปรดปุ่มย้อนกลับและปุ่มไปข้างหน้า
ไม่มีการสร้างรายงานการทดสอบเริ่มต้น การสร้างผลการทดสอบเริ่มต้นภายในเครื่องมือ
สำหรับการกำหนดพารามิเตอร์ผู้ใช้ต้องพึ่งพาภาษาโปรแกรม การกำหนดพารามิเตอร์มีอยู่ในตัวและใช้งานง่าย

Selenium-IDE (Integrated Development Environment) เป็นปลั๊กอิน Firefox ที่ใช้งานง่ายในการพัฒนากรณีทดสอบซีลีเนียม มีส่วนติดต่อผู้ใช้แบบกราฟิกสำหรับบันทึกการกระทำของผู้ใช้โดยใช้ Firefox ซึ่งใช้เพื่อเรียนรู้และใช้งาน Selenium แต่สามารถใช้ได้กับเบราว์เซอร์ Firefox เท่านั้นเนื่องจากไม่รองรับเบราว์เซอร์อื่น

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

ตารางต่อไปนี้แสดงรายการส่วนที่เราจะกล่าวถึงในบทนี้

ซีเนียร์ ชื่อเรื่องและคำอธิบาย
1 ดาวน์โหลด Selenium IDE

ส่วนนี้เกี่ยวกับวิธีดาวน์โหลดและกำหนดค่า Selenium IDE

2 คุณสมบัติของ Selenium IDE

ส่วนนี้เกี่ยวข้องกับคุณสมบัติที่มีอยู่ใน Selenium IDE

3 การสร้างการทดสอบ Selenium IDE

ส่วนนี้เกี่ยวกับวิธีสร้างการทดสอบ IDE โดยใช้คุณสมบัติการบันทึก

4 การดีบักสคริปต์ Selenium IDE

ส่วนนี้เกี่ยวข้องกับการดีบักสคริปต์ Selenium IDE

5 การใส่จุดยืนยัน

ส่วนนี้อธิบายวิธีการแทรกจุดตรวจสอบใน Selenium IDE

6 การจับคู่รูปแบบซีลีเนียม

ส่วนนี้เกี่ยวข้องกับวิธีการทำงานกับนิพจน์ทั่วไปโดยใช้ IDE

7 ส่วนขยายผู้ใช้ซีลีเนียม

สคริปต์ Java ที่อนุญาตให้ผู้ใช้ปรับแต่งหรือเพิ่มฟังก์ชันการทำงานใหม่

8 การเรียกใช้เบราว์เซอร์ที่แตกต่างกัน

ส่วนนี้จะเกี่ยวกับวิธีเรียกใช้งานสคริปต์ Selenium IDE บนเบราว์เซอร์ต่างๆ

ในการพัฒนาสคริปต์ Selenium RC หรือ WebDriver ผู้ใช้ต้องแน่ใจว่ามีการกำหนดค่าเริ่มต้นเสร็จสิ้น การตั้งค่าสภาพแวดล้อมเกี่ยวข้องกับขั้นตอนต่อไปนี้

  • ดาวน์โหลดและติดตั้ง Java
  • ดาวน์โหลดและกำหนดค่า Eclipse
  • กำหนดค่า FireBug และ FirePath
  • กำหนดค่า Selenium RC
  • กำหนดค่า Selenium WebDriver

ดาวน์โหลดและติดตั้ง Java

เราจำเป็นต้องติดตั้ง JDK (Java Development Kit) เพื่อที่จะทำงานกับ Selenium WebDriver / Selenium ให้เราดูวิธีดาวน์โหลดและติดตั้ง Java

Step 1 - ไปที่ UR

https://www.oracle.com/technetwork/java/javase/downloads/index.html

Step 2 - ไปที่ส่วน "ดาวน์โหลด" และเลือก "ดาวน์โหลด JDK"

Step 3 - เลือกปุ่มตัวเลือก "ยอมรับข้อตกลงใบอนุญาต"

Step 4- เลือกการติดตั้งที่เหมาะสม ในกรณีนี้เป็นบิต 'Windows 7-64' คลิกลิงก์ที่เหมาะสมและบันทึกไฟล์. exe ลงในดิสก์ของคุณ

Step 5- เรียกใช้ไฟล์ exe ที่ดาวน์โหลดมาเพื่อเปิดตัวช่วยติดตั้ง คลิก 'ถัดไป' เพื่อดำเนินการต่อ

Step 6 - เลือกคุณสมบัติและคลิก 'ถัดไป'

Step 7 - ตัวติดตั้งถูกแยกออกและความคืบหน้าจะแสดงในวิซาร์ด

Step 8 - ผู้ใช้สามารถเลือกตำแหน่งการติดตั้งและคลิก 'ถัดไป'

Step 9 - โปรแกรมติดตั้งจะติดตั้ง JDK และไฟล์ใหม่จะถูกคัดลอก

Step 10 - โปรแกรมติดตั้งติดตั้งสำเร็จและแสดงสิ่งเดียวกันกับผู้ใช้

Step 11- ในการตรวจสอบว่าการติดตั้งสำเร็จหรือไม่ให้ไปที่พรอมต์คำสั่งและพิมพ์ 'java' เป็นคำสั่ง ผลลัพธ์ของคำสั่งแสดงอยู่ด้านล่าง หากการติดตั้ง Java ไม่สำเร็จหรือหากยังไม่ได้ติดตั้งจะทำให้เกิดข้อผิดพลาด "คำสั่งที่ไม่รู้จัก"

ดาวน์โหลดและกำหนดค่า Eclipse

Step 1 - ไปที่ URL: https://www.eclipse.org/downloads/ และดาวน์โหลดไฟล์ที่เหมาะสมตามสถาปัตยกรรมระบบปฏิบัติการของคุณ

Step 2 - คลิกปุ่ม "ดาวน์โหลด"

Step 3- การดาวน์โหลดจะอยู่ในรูปแบบซิป เปิดเครื่องรูดเนื้อหา

Step 4 - ค้นหา Eclipse.exe และดับเบิลคลิกที่ไฟล์

Step 5 - ในการกำหนดค่าพื้นที่ทำงานให้เลือกตำแหน่งที่จะต้องดำเนินการพัฒนา

Step 6 - หน้าต่าง Eclipse จะเปิดขึ้นตามที่แสดงด้านล่าง

กำหนดค่า FireBug และ FirePath

ในการทำงานกับ Selenium RC หรือ WebDriver เราจำเป็นต้องค้นหาองค์ประกอบตาม XPath หรือ ID หรือชื่อเป็นต้นเพื่อที่จะค้นหาองค์ประกอบเราจำเป็นต้องมีเครื่องมือ / ปลั๊กอิน

Step 1 - ไปที่ URL: https://addons.mozilla.org/en-US/firefox/addon/firebug/ และดาวน์โหลดปลั๊กอิน

Step 2 - โปรแกรมติดตั้งส่วนเสริมจะแสดงให้ผู้ใช้เห็นและได้รับการติดตั้งเมื่อคลิกปุ่ม 'ติดตั้ง'

Step 3 - หลังจากติดตั้งเราสามารถเปิดปลั๊กอินได้โดยไปที่ "Web Developer" >> "Firebug"

Step 4- FirePath ซึ่งเป็นปลั๊กอินที่ทำงานภายใน Firebug ช่วยให้ผู้ใช้คว้า 'XPath' ขององค์ประกอบได้ ติดตั้ง FirePath โดยไปที่ "https://addons.mozilla.org/en-US/firefox/addon/firepath/"

Step 5 - โปรแกรมติดตั้งส่วนเสริมจะแสดงให้ผู้ใช้เห็นและได้รับการติดตั้งเมื่อคลิกปุ่ม 'ติดตั้ง'

Step 6 - ตอนนี้เปิด "Firebug" โดยไปที่ "Tools" >> "Webdeveloper" >> "Firebug"

ตัวอย่าง

ตอนนี้ให้เราเข้าใจวิธีใช้ FireBug และ FirePath ด้วยตัวอย่าง สำหรับการสาธิตเราจะใช้ www.google.com และบันทึกคุณสมบัติของกล่องข้อความของ "google.com"

Step 1- ครั้งแรกคลิกที่ไอคอนลูกศรตามที่ไฮไลต์ในภาพหน้าจอต่อไปนี้แล้วลากไปยังวัตถุที่เราต้องการจับภาพคุณสมบัติ HTML / DOM ของวัตถุจะแสดงดังที่แสดงด้านล่าง เราสามารถจับ 'ID' ของกล่องข้อความที่เราสามารถโต้ตอบได้

Step 2 - ในการดึง XPath ของวัตถุไปที่แท็บ 'firepath' และทำตามขั้นตอนต่อไปนี้

  • คลิกไอคอน Spy
  • เลือกตัวควบคุมที่เราต้องการจับ XPath
  • XPath ของตัวควบคุมที่เลือกจะถูกสร้างขึ้น

กำหนดค่า Selenium RC

ตอนนี้ให้เราดูวิธีกำหนดค่า Selenium Remote control เราจะเข้าใจวิธีการพัฒนาสคริปต์ด้วย Selenium RC ในบทต่อ ๆ ไปอย่างไรก็ตามสำหรับตอนนี้เราจะเข้าใจแค่ส่วนการกำหนดค่าของมัน

Step 1 - ไปที่ส่วนการดาวน์โหลดซีลีเนียม http://www.seleniumhq.org/download/ และดาวน์โหลด Selenium Server โดยคลิกที่หมายเลขเวอร์ชันที่แสดงด้านล่าง

Step 2- หลังจากดาวน์โหลดเราจำเป็นต้องเริ่มเซิร์ฟเวอร์ Selenium ในการทำเช่นนั้นให้เปิด command prompt และไปที่โฟลเดอร์ที่เก็บไฟล์ JAR ที่ดาวน์โหลดไว้ดังที่แสดงด้านล่าง

Step 3- ในการเริ่มต้นเซิร์ฟเวอร์ให้ใช้คำสั่ง 'java -jar << ชื่อ jar ที่ดาวน์โหลดมา >> และหากติดตั้ง java JDK อย่างถูกต้องคุณจะได้รับข้อความแสดงความสำเร็จดังที่แสดงด้านล่าง ตอนนี้เราสามารถเริ่มเขียนสคริปต์ Selenium RC ได้แล้ว

กำหนดค่า Selenium WebDriver

ตอนนี้ให้เราดูวิธีกำหนดค่า Selenium WebDriver เราจะเข้าใจวิธีการพัฒนาสคริปต์ด้วย Selenium WebDriver ในบทต่อ ๆ ไปอย่างไรก็ตามสำหรับตอนนี้เราจะเข้าใจแค่ส่วนการกำหนดค่าของมัน

Step 1 - ไปที่ส่วนการดาวน์โหลดซีลีเนียม http://www.seleniumhq.org/download/ และดาวน์โหลด Selenium WebDriver โดยคลิกที่หมายเลขเวอร์ชันดังที่แสดงด้านล่าง

Step 2 - ไฟล์ที่ดาวน์โหลดมาอยู่ในรูปแบบ Zipped และต้องเปิดเครื่องรูดเนื้อหาเพื่อจับคู่กับโฟลเดอร์โครงการ

Step 3- เนื้อหาที่คลายซิปจะแสดงดังที่แสดงด้านล่าง วิธีการแมปไปยังโฟลเดอร์โครงการและวิธีเริ่มการเขียนสคริปต์จะได้รับการจัดการในบท webDriver

Selenium RC คืออะไร?

Selenium Remote Control (RC) เป็นโครงการหลักของซีลีเนียมที่คงอยู่เป็นเวลานานก่อนที่ Selenium WebDriver (Selenium 2.0) จะมีขึ้น ตอนนี้ Selenium RC แทบไม่ได้ใช้งานเนื่องจาก WebDriver มีคุณสมบัติที่มีประสิทธิภาพมากขึ้นอย่างไรก็ตามผู้ใช้ยังคงสามารถพัฒนาสคริปต์โดยใช้ RC ได้

ช่วยให้เราสามารถเขียนการทดสอบ UI ของเว็บแอปพลิเคชันอัตโนมัติด้วยความช่วยเหลือของภาษาโปรแกรมเช่น Java, C #, Perl, Python และ PHP เพื่อสร้างการทดสอบที่ซับซ้อนมากขึ้นเช่นการอ่านและเขียนไฟล์การสืบค้นฐานข้อมูลและการส่งอีเมลผลการทดสอบ .

สถาปัตยกรรม Selenium RC

Selenium RC ทำงานในลักษณะที่ไลบรารีไคลเอ็นต์สามารถสื่อสารกับ Selenium RC Server โดยส่งคำสั่ง Selenium แต่ละคำสั่งเพื่อดำเนินการ จากนั้นเซิร์ฟเวอร์จะส่งคำสั่ง Selenium ไปยังเบราว์เซอร์โดยใช้คำสั่ง Selenium-Core JavaScript

เบราว์เซอร์เรียกใช้คำสั่ง Selenium โดยใช้ตัวแปล JavaScript

Selenium RC มีสองส่วน

  • Selenium Server เปิดตัวและฆ่าเบราว์เซอร์ นอกจากนั้นยังตีความและดำเนินการคำสั่ง Selenese นอกจากนี้ยังทำหน้าที่เป็นพร็อกซี HTTP โดยดักจับและตรวจสอบข้อความ HTTP ที่ส่งผ่านระหว่างเบราว์เซอร์และแอปพลิเคชันที่อยู่ระหว่างการทดสอบ

  • ไลบรารีไคลเอ็นต์ที่จัดเตรียมอินเทอร์เฟซระหว่างภาษาโปรแกรม (Java, C #, Perl, Python และ PHP) และเซิร์ฟเวอร์ Selenium-RC

การเขียนสคริปต์ RC

ตอนนี้ให้เราเขียนสคริปต์ตัวอย่างโดยใช้ Selenium Remote Control ให้เราใช้http://www.calculator.net/เพื่อความเข้าใจ Selenium RC เราจะทำการคำนวณเปอร์เซ็นต์โดยใช้ 'เครื่องคำนวณเปอร์เซ็นต์' ที่มีอยู่ในโมดูล 'เครื่องคำนวณทางคณิตศาสตร์'

Step 1 - เริ่มการควบคุมระยะไกล Selenium (ด้วยความช่วยเหลือของพรอมต์คำสั่ง)

Step 2 - หลังจากเปิดตัว Selenium RC แล้วให้เปิด Eclipse และสร้าง "New Project" ดังที่แสดงด้านล่าง

Step 3 - ป้อนชื่อโครงการและคลิกปุ่ม 'ถัดไป'

Step 4 - ตรวจสอบโฟลเดอร์ Source, Projects, Libraries และ Output แล้วคลิก 'Finish'

Step 5 - คลิกขวาที่ 'project' container แล้วเลือก 'Configure Build Path'

Step 6- คุณสมบัติสำหรับ 'selrcdemo' จะเปิดขึ้น ไปที่แท็บ 'Libraries' และเลือก 'Add External JARs' เลือกไฟล์ Selenium RC jar ที่เราดาวน์โหลดมาและจะปรากฏดังที่แสดงด้านล่าง

Step 7 - ไลบรารีอ้างอิงจะแสดงดังที่แสดงด้านล่าง

Step 8 - สร้างไฟล์คลาสใหม่โดยคลิกขวาที่โฟลเดอร์ 'src' แล้วเลือก 'New' >> 'class'

Step 9 - ป้อนชื่อของไฟล์คลาสและเปิดใช้งาน 'public static void main' ดังที่แสดงด้านล่าง

Step 10 - Created Class ถูกสร้างขึ้นภายใต้โครงสร้างโฟลเดอร์ดังที่แสดงด้านล่าง

Step 11- ตอนนี้ได้เวลาเขียนโค้ดแล้ว โค้ดต่อไปนี้มีความคิดเห็นฝังอยู่เพื่อให้ผู้อ่านเข้าใจถึงสิ่งที่นำเสนอ

package selrcdemo;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

public class rcdemo {
   public static void main(String[] args) throws InterruptedException {

      // Instatiate the RC Server
      Selenium selenium = new DefaultSelenium("localhost", 4444 , "firefox", "http://www.calculator.net");
      selenium.start();   // Start
      selenium.open("/");  // Open the URL
      selenium.windowMaximize();

      // Click on Link Math Calculator
      selenium.click("xpath = .//*[@id = 'menu']/div[3]/a");
      Thread.sleep(2500); // Wait for page load

      // Click on Link Percent Calculator
      selenium.click("xpath = .//*[@id = 'menu']/div[4]/div[3]/a");
      Thread.sleep(4000); // Wait for page load

      // Focus on text Box
      selenium.focus("name = cpar1");
      
      // enter a value in Text box 1
      selenium.type("css=input[name = \"cpar1\"]", "10");
      
      // enter a value in Text box 2
      selenium.focus("name = cpar2");
      selenium.type("css = input[name = \"cpar2\"]", "50");

      // Click Calculate button
      selenium.click("xpath = .//*[@id = 'content']/table/tbody/tr/td[2]/input");

      // verify if the result is 5
      String result = selenium.getText(".//*[@id = 'content']/p[2]");

      if (result == "5") {
         System.out.println("Pass");
      } else {
         System.out.println("Fail");
      }
   }
}

Step 12 - ตอนนี้ให้เรารันสคริปต์โดยคลิกปุ่ม 'เรียกใช้'

Step 13 - สคริปต์จะเริ่มดำเนินการและผู้ใช้จะสามารถดูประวัติคำสั่งภายใต้แท็บ "ประวัติคำสั่ง"

Step 14- สถานะสุดท้ายของแอปพลิเคชันแสดงดังต่อไปนี้ คำนวณเปอร์เซ็นต์และแสดงผลลัพธ์บนหน้าจอดังที่แสดงด้านล่าง

Step 15- ผลลัพธ์ของการทดสอบจะพิมพ์บนคอนโซล Eclipse ดังที่แสดงด้านล่างขณะที่เราได้พิมพ์เอาต์พุตไปยังคอนโซล ตามเวลาจริงผลลัพธ์จะถูกเขียนลงในไฟล์ HTML หรือในไฟล์ Text แบบธรรมดา

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

  • Actions

  • Accessors

  • Assertions

ตัวระบุตำแหน่ง

Element Locators ช่วยให้ Selenium ระบุองค์ประกอบ HTML ที่คำสั่งอ้างถึง ตัวระบุตำแหน่งทั้งหมดเหล่านี้สามารถระบุได้ด้วยความช่วยเหลือของปลั๊กอิน FirePath และ FireBug ของ Mozilla โปรดดูบทการตั้งค่าสภาพแวดล้อมสำหรับรายละเอียด

  • identifier = id เลือกองค์ประกอบที่มีแอตทริบิวต์ "id" ที่ระบุและหากไม่ตรงกันให้เลือกองค์ประกอบแรกที่มีแอตทริบิวต์ @name คือ id

  • id = id เลือกองค์ประกอบที่มีแอตทริบิวต์ "id" ที่ระบุ

  • name = name เลือกองค์ประกอบแรกที่มีแอตทริบิวต์ "name" ที่ระบุ

  • dom = javascriptExpressionซีลีเนียมค้นหาองค์ประกอบโดยการประเมินสตริงที่ระบุซึ่งอนุญาตให้เราสำรวจผ่าน HTML Document Object Model โดยใช้ JavaScript ผู้ใช้ไม่สามารถส่งคืนค่า แต่สามารถประเมินเป็นนิพจน์ในบล็อก

  • xpath = xpathExpression ค้นหาองค์ประกอบโดยใช้นิพจน์ XPath

  • link = textPattern เลือกองค์ประกอบลิงก์ (ภายในแท็กจุดยึด) ซึ่งมีข้อความที่ตรงกับรูปแบบที่ระบุ

  • css = cssSelectorSyntax เลือกองค์ประกอบโดยใช้ css selector

WebDriver เป็นเครื่องมือสำหรับการทดสอบเว็บแอปพลิเคชันโดยอัตโนมัติ เป็นที่รู้จักกันแพร่หลายว่าซีลีเนียม 2.0 WebDriver ใช้กรอบงานพื้นฐานที่แตกต่างกันในขณะที่ Selenium RC ใช้ JavaScript Selenium-Core ที่ฝังอยู่ภายในเบราว์เซอร์ซึ่งมีข้อ จำกัด บางประการ WebDriver โต้ตอบโดยตรงกับเบราว์เซอร์โดยไม่มีตัวกลางใด ๆ ซึ่งแตกต่างจาก Selenium RC ที่ขึ้นอยู่กับเซิร์ฟเวอร์ ใช้ในบริบทต่อไปนี้ -

  • การทดสอบหลายเบราว์เซอร์รวมถึงการปรับปรุงการทำงานสำหรับเบราว์เซอร์ที่ Selenium RC (Selenium 1.0) ไม่รองรับ

  • การจัดการหลายเฟรมหน้าต่างเบราว์เซอร์หลายหน้าต่างป๊อปอัปและการแจ้งเตือน

  • การนำทางเพจที่ซับซ้อน

  • การนำทางของผู้ใช้ขั้นสูงเช่นการลากแล้วปล่อย

  • องค์ประกอบ UI ที่ใช้ AJAX

สถาปัตยกรรม

WebDriver อธิบายได้ดีที่สุดด้วยแผนภาพสถาปัตยกรรมอย่างง่ายดังที่แสดงด้านล่าง

ซีลีเนียม RC Vs WebDriver

ซีลีเนียม RC Selenium WebDriver
สถาปัตยกรรมของ Selenium RC มีความซับซ้อนเนื่องจากเซิร์ฟเวอร์ต้องเปิดใช้งานก่อนเริ่มการทดสอบ สถาปัตยกรรมของ WebDriver นั้นง่ายกว่า Selenium RC เนื่องจากควบคุมเบราว์เซอร์จากระดับ OS
เซิร์ฟเวอร์ Selenium ทำหน้าที่เป็นคนกลางระหว่างเบราว์เซอร์และคำสั่ง Selenese WebDriver โต้ตอบโดยตรงกับเบราว์เซอร์และใช้เอ็นจิ้นของเบราว์เซอร์เพื่อควบคุม
การเรียกใช้สคริปต์ Selenium RC จะช้ากว่าเนื่องจากใช้ Javascript เพื่อโต้ตอบกับ RC WebDriver เร็วกว่าเนื่องจากโต้ตอบโดยตรงกับเบราว์เซอร์
Selenium RC ไม่สามารถรองรับการทำงานแบบไร้หัวได้เนื่องจากต้องใช้เบราว์เซอร์จริงเพื่อใช้งานได้ WebDriver สามารถรองรับการดำเนินการแบบไร้หัว
เป็น API ที่เรียบง่ายและมีขนาดเล็ก API ที่ซับซ้อนและค่อนข้างใหญ่เมื่อเทียบกับ RC
API เชิงวัตถุน้อยลง API เชิงวัตถุล้วนๆ
ไม่สามารถทดสอบแอปพลิเคชันมือถือ สามารถทดสอบแอปพลิเคชัน iPhone / Android

การเขียนสคริปต์โดยใช้ WebDriver

ให้เราเข้าใจวิธีการทำงานกับ WebDriver สำหรับการสาธิตเราจะใช้https://www.calculator.net/. เราจะทำการ "เครื่องคำนวณเปอร์เซ็นต์" ซึ่งอยู่ภายใต้ "เครื่องคำนวณคณิตศาสตร์" เราได้ดาวน์โหลด WebDriver JAR ที่จำเป็นแล้ว โปรดดูบท "การตั้งค่าสิ่งแวดล้อม" สำหรับรายละเอียด

Step 1 - เปิด "Eclipse" จากโฟลเดอร์ Extracted Eclipse

Step 2 - เลือกพื้นที่ทำงานโดยคลิกปุ่ม "เรียกดู"

Step 3 - ตอนนี้สร้าง 'โครงการใหม่' จากเมนู 'ไฟล์'

Step 4 - ป้อนชื่อโครงการและคลิก 'ถัดไป'

Step 5- ไปที่ Libraries Tab แล้วเลือก JAR ทั้งหมดที่เราดาวน์โหลดมา เพิ่มการอ้างอิงไปยังโฟลเดอร์ Selenium WebDriver Library ของ JAR และ selenium-java-2.42.2.jar และ selenium-java-2.42.2-srcs.jar

Step 6 - สร้างแพ็คเกจตามที่แสดงด้านล่าง

Step 7 - คลิกขวาที่แพ็กเกจแล้วเลือก 'ใหม่' >> 'คลาส' เพื่อสร้าง 'คลาส'

Step 8 - ตอนนี้ตั้งชื่อคลาสและทำให้เป็นฟังก์ชันหลัก

Step 9 - โครงร่างของคลาสแสดงดังต่อไปนี้

Step 10- ตอนนี้ได้เวลาเขียนโค้ดแล้ว สคริปต์ต่อไปนี้เข้าใจง่ายกว่าเนื่องจากมีข้อคิดเห็นฝังอยู่เพื่ออธิบายขั้นตอนอย่างชัดเจน โปรดดูบท "ตัวระบุตำแหน่ง" เพื่อทำความเข้าใจวิธีการจับภาพคุณสมบัติของวัตถุ

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

public class webdriverdemo {
   public static void main(String[] args) {
   
      WebDriver driver = new FirefoxDriver();
      //Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      //Launch website
      driver.navigate().to("http://www.calculator.net/");
      
      //Maximize the browser
      driver.manage().window().maximize();
      
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr[2]/td/input[2]")).click();

      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/font/b")).getText();

      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      //Close the Browser.
      driver.close();
   }
}

Step 11 - ผลลัพธ์ของสคริปต์ข้างต้นจะถูกพิมพ์ในคอนโซล

คำสั่งที่ใช้มากที่สุด

ตารางต่อไปนี้แสดงรายการคำสั่งที่ใช้บ่อยที่สุดใน WebDriver พร้อมกับไวยากรณ์

ซีเนียร์ คำสั่งและคำอธิบาย
1

driver.get("URL")

เพื่อนำทางไปยังแอปพลิเคชัน

2

element.sendKeys("inputtext")

ป้อนข้อความลงในช่องป้อนข้อมูล

3

element.clear()

ล้างเนื้อหาจากช่องป้อนข้อมูล

4

select.deselectAll()

ยกเลิกการเลือก OPTION ทั้งหมดจาก SELECT แรกในเพจ

5

select.selectByVisibleText("some text")

เลือก OPTION ด้วยอินพุตที่ระบุโดยผู้ใช้

6

driver.switchTo().window("windowName")

ย้ายโฟกัสจากหน้าต่างหนึ่งไปยังอีกหน้าต่างหนึ่ง

7

driver.switchTo().frame("frameName")

แกว่งจากเฟรมหนึ่งไปอีกเฟรมหนึ่ง

8

driver.switchTo().alert()

ช่วยในการจัดการการแจ้งเตือน

9

driver.navigate().to("URL")

ไปที่ URL

10

driver.navigate().forward()

เพื่อนำทางไปข้างหน้า

11

driver.navigate().back()

เพื่อย้อนกลับ

12

driver.close()

ปิดเบราว์เซอร์ปัจจุบันที่เกี่ยวข้องกับไดรเวอร์

13

driver.quit()

ออกจากไดรเวอร์และปิดหน้าต่างที่เกี่ยวข้องทั้งหมดของไดรเวอร์นั้น

14

driver.refresh()

รีเฟรชหน้าปัจจุบัน

การค้นหาองค์ประกอบใน Selenium WebDriver ดำเนินการด้วยความช่วยเหลือของเมธอด findElement () และ findElements () ที่จัดเตรียมโดยคลาส WebDriver และ WebElement

  • findElement () ส่งคืนอ็อบเจ็กต์ WebElement ตามเกณฑ์การค้นหาที่ระบุหรือลงเอยด้วยการทิ้งข้อยกเว้นหากไม่พบองค์ประกอบใด ๆ ที่ตรงกับเกณฑ์การค้นหา

  • findElements () ส่งคืนรายการ WebElements ที่ตรงกับเกณฑ์การค้นหา หากไม่พบองค์ประกอบจะส่งคืนรายการว่าง

ตารางต่อไปนี้แสดงรายการไวยากรณ์ Java ทั้งหมดสำหรับการค้นหาองค์ประกอบใน Selenium WebDriver

วิธี ไวยากรณ์ คำอธิบาย
โดย ID driver.findElement (By.id (<element ID>)) ค้นหาองค์ประกอบโดยใช้แอตทริบิวต์ ID
โดยชื่อ driver.findElement (By.name (<ชื่อองค์ประกอบ>)) ค้นหาองค์ประกอบโดยใช้แอตทริบิวต์ Name
ตามชื่อชั้น driver.findElement (By.className (<element class>)) ค้นหาองค์ประกอบโดยใช้แอตทริบิวต์ Class
ตามชื่อแท็ก driver.findElement (By.tagName (<htmltagname>)) ค้นหาองค์ประกอบโดยใช้แท็ก HTML
ตามข้อความลิงก์ driver.findElement (By.linkText (<linktext>)) ค้นหาลิงก์โดยใช้ข้อความลิงก์
โดยข้อความลิงก์บางส่วน driver.findElement (By.partialLinkText (<linktext>)) ค้นหาลิงก์โดยใช้ข้อความบางส่วนของลิงก์
โดย CSS driver.findElement (By.cssSelector (<css selector>)) ค้นหาองค์ประกอบโดยใช้ตัวเลือก CSS
โดย XPath driver.findElement (By.xpath (<xpath>)) ค้นหาองค์ประกอบโดยใช้แบบสอบถาม XPath

การใช้ตัวระบุตำแหน่ง

ตอนนี้ให้เราเข้าใจการใช้งานจริงของแต่ละวิธีการระบุตำแหน่งด้วยความช่วยเหลือของ https://www.calculator.net

โดย ID

ที่นี่มีการเข้าถึงวัตถุด้วยความช่วยเหลือของ ID ในกรณีนี้คือ ID ของกล่องข้อความ ค่าจะถูกป้อนลงในกล่องข้อความโดยใช้เมธอด sendkeys ด้วยความช่วยเหลือของ ID (cdensity)

driver.findElement(By.id("cdensity")).sendKeys("10");

โดยชื่อ

ที่นี่มีการเข้าถึงวัตถุด้วยความช่วยเหลือของชื่อ ในกรณีนี้เป็นชื่อของกล่องข้อความ ค่าจะถูกป้อนลงในกล่องข้อความโดยใช้เมธอด sendkeys ด้วยความช่วยเหลือของ ID (cdensity)

driver.findElement(By.name("cdensity")).sendKeys("10");

ตามชื่อชั้น

ที่นี่มีการเข้าถึงวัตถุด้วยความช่วยเหลือของชื่อคลาส ในกรณีนี้เป็นชื่อคลาสของ WebElement ค่าสามารถเข้าถึงได้ด้วยความช่วยเหลือของเมธอด gettext

List<WebElement> byclass = driver.findElements(By.className("smalltext smtb"));

ตามชื่อแท็ก

ชื่อแท็ก DOM ขององค์ประกอบสามารถใช้เพื่อค้นหาองค์ประกอบนั้น ๆ ใน WebDriver มันง่ายมากที่จะจัดการกับตารางด้วยความช่วยเหลือของวิธีนี้ ดูรหัสต่อไปนี้

WebElement table = driver.findElement(By.id("calctable"));
List<WebElement> row = table.findElements(By.tagName("tr"));
int rowcount = row.size();

โดย Link Text

วิธีนี้ช่วยในการค้นหาองค์ประกอบลิงก์ที่ตรงกับข้อความที่มองเห็นได้

driver.findElements(By.linkText("Volume")).click();

โดยข้อความลิงก์บางส่วน

วิธีนี้ช่วยค้นหาองค์ประกอบลิงก์ที่มีข้อความที่มองเห็นได้ตรงบางส่วน

driver.findElement(By.partialLinkText("Volume")).click();

โดย CSS

CSS ใช้เป็นวิธีในการระบุ webobject แต่เบราว์เซอร์บางตัวไม่รองรับการระบุ CSS

WebElement loginButton = driver.findElement(By.cssSelector("input.login"));

โดย XPath

XPath ย่อมาจากภาษาพา ธ XML เป็นภาษาแบบสอบถามสำหรับการเลือกโหนดจากเอกสาร XML XPath ขึ้นอยู่กับการแสดงโครงสร้างของเอกสาร XML และให้ความสามารถในการนำทางรอบ ๆ ทรีโดยการเลือกโหนดโดยใช้เกณฑ์ต่างๆ

driver.findElement(By.xpath(".//*[@id = 'content']/table[1]/tbody/tr/td/table/tbody/tr[2]/td[1]/input")).sendkeys("100");

Selenium WebDriver เป็นเครื่องมือที่ใช้บ่อยที่สุดในบรรดาเครื่องมือทั้งหมดที่มีอยู่ในชุดเครื่องมือ Selenium ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องเข้าใจวิธีใช้ซีลีเนียมเพื่อโต้ตอบกับเว็บแอป ในโมดูลนี้ให้เราเข้าใจวิธีโต้ตอบกับวัตถุ GUI โดยใช้ Selenium webDriver

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

รายการด้านล่างนี้คือการกระทำประเภทต่างๆกับวัตถุ GUI เหล่านั้น -

  • การโต้ตอบกล่องข้อความ

  • การเลือกปุ่มตัวเลือก

  • เลือกกล่องกาเครื่องหมาย

  • การเลือกรายการแบบหล่นลง

  • Synchronization

  • ลากและวาง

  • การทำงานของแป้นพิมพ์

  • การดำเนินการของเมาส์

  • เลือกหลายรายการ

  • ค้นหาลิงค์ทั้งหมด

มีองค์ประกอบต่างๆที่เกี่ยวข้องในการออกแบบการทดสอบ ขอให้เราเข้าใจองค์ประกอบสำคัญบางอย่างที่เกี่ยวข้องกับการออกแบบกรอบงานด้วย เราจะเรียนรู้หัวข้อต่อไปนี้ในบทนี้ -

  • Page Object Model

  • การกำหนดพารามิเตอร์โดยใช้ Excel

  • Log4j บันทึก

  • การจัดการข้อยกเว้น

  • การทดสอบหลายเบราว์เซอร์

  • จับภาพหน้าจอ

  • จับภาพวิดีโอ

TestNG เป็นกรอบการทดสอบที่มีประสิทธิภาพซึ่งเป็น JUnit เวอร์ชันปรับปรุงซึ่งใช้งานมานานก่อนที่ TestNG จะมีขึ้น NG ย่อมาจาก 'Next Generation'

กรอบงาน TestNG มีคุณสมบัติดังต่อไปนี้ -

  • คำอธิบายประกอบช่วยให้เราจัดระเบียบการทดสอบได้ง่าย
  • การกำหนดค่าการทดสอบที่ยืดหยุ่น
  • สามารถจัดกลุ่มกรณีทดสอบได้ง่ายขึ้น
  • การทดสอบแบบขนานสามารถทำได้โดยใช้ TestNG
  • รองรับการทดสอบด้วยข้อมูล
  • การรายงาน Inbuilt

การติดตั้ง TestNG สำหรับ Eclipse

Step 1 - เปิด Eclipse และเลือก 'ติดตั้งซอฟต์แวร์ใหม่'

Step 2 - ป้อน URL เป็น "http://beust.com/eclipse" แล้วคลิก "เพิ่ม"

Step 3- กล่องโต้ตอบ 'เพิ่มที่เก็บ' จะเปิดขึ้น ป้อนชื่อเป็น 'TestNG' แล้วคลิก 'ตกลง'

Step 4 - คลิก 'Select All' และ 'TestNG' จะถูกเลือกดังแสดงในรูป

Step 5 - คลิก 'ถัดไป' เพื่อดำเนินการต่อ

Step 6 - ตรวจสอบรายการที่เลือกแล้วคลิก 'ถัดไป'

Step 7 - "ยอมรับข้อตกลงใบอนุญาต" แล้วคลิก "เสร็จสิ้น"

Step 8 - TestNG เริ่มการติดตั้งและความคืบหน้าจะแสดงดังต่อไปนี้

Step 9- คำเตือนด้านความปลอดภัยจะปรากฏขึ้นเนื่องจากไม่สามารถกำหนดความถูกต้องของซอฟต์แวร์ได้ คลิก "ตกลง"

Step 10- โปรแกรมติดตั้งแจ้งให้รีสตาร์ท Eclipse เพื่อให้การเปลี่ยนแปลงมีผล คลิก 'ใช่'

คำอธิบายประกอบใน TestNG

คำอธิบายประกอบถูกเพิ่มอย่างเป็นทางการในภาษา Java ใน JDK 5 และ TestNG ได้เลือกใช้คำอธิบายประกอบเพื่อใส่คำอธิบายประกอบคลาสทดสอบ ต่อไปนี้เป็นประโยชน์บางประการของการใช้คำอธิบายประกอบ สามารถดูข้อมูลเพิ่มเติมเกี่ยวกับ TestNG ได้here

  • TestNG ระบุวิธีการที่สนใจโดยค้นหาคำอธิบายประกอบ ดังนั้นชื่อวิธีการจึงไม่ จำกัด เฉพาะรูปแบบหรือรูปแบบใด ๆ

  • เราสามารถส่งผ่านพารามิเตอร์เพิ่มเติมไปยังคำอธิบายประกอบ

  • มีการพิมพ์คำอธิบายประกอบอย่างมากดังนั้นคอมไพเลอร์จะตั้งค่าสถานะข้อผิดพลาดทันที

  • คลาสทดสอบไม่จำเป็นต้องขยายอะไรอีกต่อไป (เช่น TestCase สำหรับ JUnit 3)

ซีเนียร์ คำอธิบายประกอบและคำอธิบาย
1

@BeforeSuite

วิธีการใส่คำอธิบายประกอบจะทำงานเพียงครั้งเดียวก่อนที่การทดสอบทั้งหมดในชุดนี้จะทำงาน

2

@AfterSuite

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

3

@BeforeClass

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้เพียงครั้งเดียวก่อนที่จะเรียกใช้วิธีการทดสอบแรกในคลาสปัจจุบัน

4

@AfterClass

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้เพียงครั้งเดียวหลังจากที่รันวิธีการทดสอบทั้งหมดในคลาสปัจจุบันแล้ว

5

@BeforeTest

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้ก่อนที่วิธีการทดสอบใด ๆ ที่เป็นของคลาสภายในแท็ก <test> จะถูกเรียกใช้

6

@AfterTest

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้หลังจากวิธีการทดสอบทั้งหมดที่เป็นของคลาสภายในแท็ก <test> ได้ทำงานแล้ว

7

@BeforeGroups

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

8

@AfterGroups

รายชื่อกลุ่มที่วิธีการกำหนดค่านี้จะทำงานหลังจากนั้น วิธีนี้รับประกันว่าจะทำงานในไม่ช้าหลังจากมีการเรียกใช้วิธีการทดสอบสุดท้ายที่เป็นของกลุ่มใด ๆ เหล่านี้

9

@BeforeMethod

วิธีการใส่คำอธิบายประกอบจะถูกเรียกใช้ก่อนวิธีการทดสอบแต่ละวิธี

10

@AfterMethod

วิธีการใส่คำอธิบายประกอบจะทำงานหลังจากแต่ละวิธีการทดสอบ

11

@DataProvider

ทำเครื่องหมายวิธีการเป็นการจัดหาข้อมูลสำหรับวิธีการทดสอบ วิธีการใส่คำอธิบายประกอบต้องส่งคืน Object [] [] โดยที่แต่ละ Object [] สามารถกำหนดรายการพารามิเตอร์ของวิธีการทดสอบได้ วิธีการ @Test ที่ต้องการรับข้อมูลจาก DataProvider นี้จำเป็นต้องใช้ชื่อ dataProvider เท่ากับชื่อของคำอธิบายประกอบนี้

12

@Factory

ทำเครื่องหมายวิธีการเป็นโรงงานที่ส่งคืนอ็อบเจ็กต์ที่ TestNG จะใช้เป็นคลาสทดสอบ เมธอดต้องส่งคืน Object []

13

@Listeners

กำหนดผู้ฟังในชั้นเรียนทดสอบ

14

@Parameters

อธิบายวิธีการส่งพารามิเตอร์ไปยังเมธอด @Test

15

@Test

ทำเครื่องหมายคลาสหรือวิธีการเป็นส่วนหนึ่งของการทดสอบ

การตั้งค่า TestNG-Eclipse

Step 1 - เปิด Eclipse และสร้าง 'New Java Project' ดังที่แสดงด้านล่าง

Step 2 - ป้อนชื่อโครงการและคลิก 'ถัดไป'

Step 3 - ไปที่แท็บ "Libraries" และเพิ่มไฟล์ Selenium Remote Control Server JAR โดยคลิกที่ "Add External JAR's" ดังที่แสดงด้านล่าง

Step 4- ไฟล์ JAR ที่เพิ่มจะแสดงที่นี่ คลิก "เพิ่มไลบรารี"

Step 5- กล่องโต้ตอบ "เพิ่มห้องสมุด" จะเปิดขึ้น เลือก 'TestNG' และคลิก 'ถัดไป' ในกล่องโต้ตอบ 'เพิ่มไลบรารี'

Step 6 - เพิ่มไลบรารี 'TestNG' ที่เพิ่มเข้ามาและแสดงดังที่แสดงด้านล่าง

Step 7 - เมื่อสร้างโครงการโครงสร้างของโครงการจะเป็นดังที่แสดงด้านล่าง

Step 8 - คลิกขวาที่โฟลเดอร์ 'src' แล้วเลือกใหม่ >> อื่น ๆ

Step 9 - เลือก 'TestNG' และคลิก 'ถัดไป'

Step 10 - เลือกชื่อ 'โฟลเดอร์แหล่งที่มา' และคลิก 'ตกลง'

Step 11 - เลือก 'ชื่อแพ็กเกจ', 'ชื่อคลาส' และคลิก 'เสร็จสิ้น'

Step 12 - Package explorer และคลาสที่สร้างขึ้นจะปรากฏขึ้น

ทดสอบครั้งแรกใน TestNG

ตอนนี้ให้เราเริ่มเขียนสคริปต์โดยใช้ TestNG ให้เราเขียนสคริปต์สำหรับตัวอย่างเดียวกับที่เราใช้ในการทำความเข้าใจ WebDriver เราจะใช้แอปพลิเคชันสาธิตwww.calculator.netและคำนวณเปอร์เซ็นต์

ในการทดสอบต่อไปนี้คุณจะสังเกตเห็นว่าไม่มีวิธีการหลักเนื่องจาก testNG จะขับเคลื่อนโฟลว์การเรียกใช้โปรแกรม หลังจากเริ่มต้นไดรเวอร์แล้วจะเรียกใช้เมธอด '@BeforeTest' ตามด้วย '@Test' และ '@AfterTest' โปรดทราบว่าคำอธิบายประกอบ "@Test" ในชั้นเรียนสามารถมีจำนวนเท่าใดก็ได้ แต่ "@BeforeTest" และ "@AfterTest" จะปรากฏได้เพียงครั้งเดียว

package TestNG;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestNGClass {
   WebDriver driver = new FirefoxDriver();
   
   @BeforeTest
   public void launchapp() {
      // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      // Launch website
      driver.navigate().to("http://www.calculator.net");
      driver.manage().window().maximize();
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click();
      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void terminatetest() {
      driver.close();
   }
}

การดำเนินการ

ในการดำเนินการให้คลิกขวาที่ XML ที่สร้างขึ้นแล้วเลือก "Run As" >> "TestNG Suite"

การวิเคราะห์ผลลัพธ์

เอาต์พุตจะถูกโยนไปที่คอนโซลและจะปรากฏดังที่แสดงด้านล่าง เอาต์พุตคอนโซลยังมีสรุปการดำเนินการ

ผลของ TestNG ยังสามารถเห็นได้ในแท็บอื่น คลิกที่ปุ่ม "มุมมองรายงาน HTML" ที่แสดงด้านล่าง

ผลลัพธ์ HTML จะแสดงดังที่แสดงด้านล่าง

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

Selenium Grid ช่วยให้เราสามารถดำเนินการทดสอบ WebDriver หรือ Selenium Remote Control หลายอินสแตนซ์พร้อมกันซึ่งใช้รหัสฐานเดียวกันดังนั้นรหัสจึงไม่จำเป็นต้องมีอยู่ในระบบที่ดำเนินการ แพคเกจซีลีเนียมเซิร์ฟเวอร์แบบสแตนด์อโลนประกอบด้วย Hub, WebDriver และ Selenium RC เพื่อดำเนินการสคริปต์ในตาราง

Selenium Grid มี Hub และ Node

  • Hub- ฮับยังสามารถเข้าใจได้ว่าเป็นเซิร์ฟเวอร์ซึ่งทำหน้าที่เป็นจุดศูนย์กลางที่การทดสอบจะถูกเรียกใช้ Selenium Grid มีเพียง Hub เดียวและเปิดตัวในเครื่องเดียวครั้งเดียว

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

สถาปัตยกรรม

แผนภาพต่อไปนี้แสดงสถาปัตยกรรมของ Selenium Grid

การทำงานกับ Grid

ในการทำงานกับ Grid เราจำเป็นต้องปฏิบัติตามโปรโตคอลบางอย่าง ฟังด้านล่างนี้คือขั้นตอนสำคัญที่เกี่ยวข้องในกระบวนการนี้ -

  • การกำหนดค่าฮับ
  • การกำหนดค่าโหนด
  • พัฒนาสคริปต์และเตรียมไฟล์ XML
  • ทดสอบการดำเนินการ
  • การวิเคราะห์ผลลัพธ์

ให้เราพูดคุยแต่ละขั้นตอนเหล่านี้โดยละเอียด

การกำหนดค่าฮับ

Step 1 - ดาวน์โหลดไฟล์ JAR แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium ล่าสุดจากไฟล์ http://docs.seleniumhq.org/download/. ดาวน์โหลดโดยคลิกที่เวอร์ชันดังที่แสดงด้านล่าง

Step 2- เริ่มต้นฮับโดยการเรียกใช้เซิร์ฟเวอร์ซีลีเนียมโดยใช้คำสั่งต่อไปนี้ ตอนนี้เราจะใช้พอร์ต '4444' เพื่อเริ่มต้นฮับ

Note - ตรวจสอบให้แน่ใจว่าไม่มีแอปพลิเคชันอื่น ๆ ที่ทำงานบนพอร์ต # 4444

java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000

Step 3 - ตอนนี้เปิดเบราว์เซอร์และไปที่ URL http // localhost: 4444 จาก Hub (ระบบที่คุณดำเนินการขั้นตอนที่ # 2)

Step 4- คลิกที่ลิงค์ 'คอนโซล' แล้วคลิก 'ดู config' การกำหนดค่าของฮับจะแสดงดังนี้ ณ ตอนนี้เรายังไม่มีโหนดใด ๆ ดังนั้นเราจะไม่สามารถดูรายละเอียดได้

การกำหนดค่าโหนด

Step 1- ล็อกออนเข้าสู่โหนด (ที่คุณต้องการเรียกใช้สคริปต์) และวาง 'ซีลีเนียมเซิร์ฟเวอร์สแตนด์อโลน -242.2' ในโฟลเดอร์ เราจำเป็นต้องชี้ไปที่ JAR ซีลีเนียมเซิร์ฟเวอร์แบบสแตนด์อโลนในขณะที่เรียกใช้โหนด

Step 2 - เรียกใช้ FireFox Node โดยใช้คำสั่งด้านล่างนี้

java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role node -hub http://10.30.217.157:4444/grid/register
   -browser browserName = firefox -port 5555

ที่ไหน

D: \ JAR \ selenium-server-standalone-2.42.2.jar = ตำแหน่งของไฟล์ Jar แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium (บน Node Machine)

http://10.30.217.157:4444 = IP Address ของ Hub และ 4444 คือพอร์ตของ Hub

browserName = firefox (พารามิเตอร์เพื่อระบุชื่อเบราว์เซอร์บนโหนด)

5555 = พอร์ตที่ Firefox Node จะเปิดใช้งาน

Step 3- หลังจากดำเนินการคำสั่งแล้วให้กลับมาที่ Hub ไปที่ URL - http://10.30.217.157:4444 และตอนนี้ Hub จะแสดงโหนดที่ต่ออยู่

Step 4- ตอนนี้ให้เราเปิด Internet Explorer Node สำหรับการเปิดใช้งาน IE Node เราจำเป็นต้องดาวน์โหลดไดรเวอร์ Internet Explorer บนเครื่องโหนด

Step 5 - หากต้องการดาวน์โหลดไดรเวอร์ Internet Explorer ให้ไปที่ http://docs.seleniumhq.org/download/และดาวน์โหลดไฟล์ที่เหมาะสมตามสถาปัตยกรรมของระบบปฏิบัติการของคุณ หลังจากคุณดาวน์โหลดแล้วให้คลายซิปไฟล์ exe และวางไว้ในโฟลเดอร์ที่ต้องอ้างถึงในขณะที่เรียกใช้โหนด IE

Step 6 - เปิด IE โดยใช้คำสั่งต่อไปนี้

C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role webdriver -hub http://10.30.217.157:4444/grid/register
   -browser browserName = ie,platform = WINDOWS -port 5558

ที่ไหน

D: \ IEDriverServer.exe = ตำแหน่งของไดรเวอร์ IE ที่ดาวน์โหลดมา (บน Node Machine)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = ตำแหน่งของไฟล์ Jar แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium (บน Node Machine)

http://10.30.217.157:4444 = IP Address ของ Hub และ 4444 คือพอร์ตของ Hub

browserName = ie (พารามิเตอร์เพื่อระบุชื่อเบราว์เซอร์บนโหนด)

5558 = พอร์ตที่ IE Node จะเปิดใช้งาน

Step 7- หลังจากดำเนินการคำสั่งแล้วให้กลับมาที่ Hub ไปที่ URL - http://10.30.217.157:4444 และตอนนี้ Hub จะแสดงโหนด IE ที่แนบมา

Step 8- ให้เราเปิด Chrome Node ในการเปิด Chrome Node เราจำเป็นต้องดาวน์โหลดไดรเวอร์ Chrome บนเครื่องโหนด

Step 9 - หากต้องการดาวน์โหลดไดรเวอร์ Chrome ให้ไปที่ http://docs.seleniumhq.org/download/ จากนั้นไปที่พื้นที่ Third Party Browser Drivers และคลิกที่หมายเลขเวอร์ชัน '2.10' ดังที่แสดงด้านล่าง

Step 10- ดาวน์โหลดไดรเวอร์ตามประเภทของระบบปฏิบัติการของคุณ เราจะดำเนินการในสภาพแวดล้อม Windows ดังนั้นเราจะดาวน์โหลดไดรเวอร์ Windows Chrome หลังจากคุณดาวน์โหลดแล้วให้คลายซิปไฟล์ exe และวางไว้ในโฟลเดอร์ที่ต้องอ้างถึงในขณะที่เรียกใช้โหนดโครเมี่ยม

Step 11 - เปิด Chrome โดยใช้คำสั่งต่อไปนี้

C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe 
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar 
   -role webdriver -hub  http://10.30.217.157:4444/grid/register 
   -browser browserName = chrome, platform = WINDOWS -port 5557

ที่ไหน

D: \ chromedriver.exe = ตำแหน่งของไดรเวอร์ chrome ที่ดาวน์โหลดมา (บน Node Machine)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = ตำแหน่งของไฟล์ Jar แบบสแตนด์อโลนของเซิร์ฟเวอร์ Selenium (บน Node Machine)

http://10.30.217.157:4444 = IP Address ของ Hub และ 4444 คือพอร์ตของ Hub

browserName = chrome (พารามิเตอร์เพื่อระบุชื่อเบราว์เซอร์บนโหนด)

5557 = พอร์ตที่ Chrome Node จะเปิดใช้งาน

Step 12- หลังจากดำเนินการคำสั่งแล้วให้กลับมาที่ Hub ไปที่ URL - http://10.30.217.157:4444 และตอนนี้ Hub จะแสดงโหนดโครเมี่ยมที่ต่ออยู่

พัฒนาสคริปต์และเตรียมไฟล์ XML

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

พารามิเตอร์ของเบราว์เซอร์จะถูกส่งผ่านจากไฟล์ "XML"

package TestNG;

import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;

public class TestNGClass {
   public WebDriver driver;
   public String URL, Node;
   protected ThreadLocal<RemoteWebDriver> threadDriver = null;
   
   @Parameters("browser")
   @BeforeTest
   public void launchapp(String browser) throws MalformedURLException {
      String URL = "http://www.calculator.net";
      
      if (browser.equalsIgnoreCase("firefox")) {
         System.out.println(" Executing on FireFox");
         String Node = "http://10.112.66.52:5555/wd/hub";
         DesiredCapabilities cap = DesiredCapabilities.firefox();
         cap.setBrowserName("firefox");
         
         driver = new RemoteWebDriver(new URL(Node), cap);
         // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("chrome")) {
         System.out.println(" Executing on CHROME");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("chrome");
         String Node = "http://10.112.66.52:5557/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("ie")) {
         System.out.println(" Executing on IE");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("ie");
         String Node = "http://10.112.66.52:5558/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else {
         throw new IllegalArgumentException("The Browser Type is Undefined");
      }
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();     	
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      // driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void closeBrowser() {
      driver.quit();
   }
}

Step 2- พารามิเตอร์เบราว์เซอร์จะถูกส่งผ่านโดยใช้ XML สร้าง XML ภายใต้โฟลเดอร์โครงการ

Step 3 - เลือก 'ไฟล์' จาก 'ทั่วไป' และคลิก 'ถัดไป'

Step 4 - ป้อนชื่อไฟล์และคลิก 'เสร็จสิ้น'

Step 5 - TestNg.XML ถูกสร้างขึ้นภายใต้โฟลเดอร์โครงการดังที่แสดงด้านล่าง

Step 6- เนื้อหาของไฟล์ XML แสดงอยู่ด้านล่าง เราสร้างการทดสอบ 3 รายการและวางไว้ในชุดและพูดถึง parallel = "การทดสอบ" เพื่อให้การทดสอบทั้งหมดดำเนินการควบคู่กันไป

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">

   <test name = "FirefoxTest">
   <parameter name = "browser" value = "firefox" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "ChromeTest">
   <parameter name = "browser" value = "chrome" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "IETest">
   <parameter name = "browser" value = "ie" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>
   
</suite>

ทดสอบการดำเนินการ

Step 1- เลือก XML ที่สร้างขึ้น คลิกขวาและเลือก 'Run As' >> 'TestNG Suite'

Step 2- ตอนนี้เปิดโหนดซึ่งเราได้เปิดใช้โหนดเบราว์เซอร์ทั้งหมด คุณจะเห็นเบราว์เซอร์ทั้งสามทำงานพร้อมกัน

การวิเคราะห์ผลลัพธ์

Step 1- เมื่อเสร็จสิ้นการดำเนินการเราสามารถวิเคราะห์ผลลัพธ์เหมือนกับการดำเนินการอื่น ๆ สรุปผลลัพธ์จะพิมพ์ในคอนโซลตามที่แสดงในสแนปชอตต่อไปนี้

Step 2 - ไปที่แท็บ 'Results of Running Suite' และ TestNG จะแสดงผลสรุปดังที่แสดงด้านล่าง

Step 3 - เมื่อสร้าง HTML เราจะสามารถเห็นผลการทดสอบในรูปแบบ HTML