วิธีการเลือกค่าจากเมนูแบบดรอปดาวน์ใน Selenium

⚡ สรุปอย่างชาญฉลาด

เลือกค่าจากเมนูแบบดรอปดาวน์ใน Selenium ใช้คลาส Select เฉพาะเพื่อควบคุมองค์ประกอบ HTML SELECT คลาสนี้มีเมธอด selectByVisibleText, selectByValue และ selectByIndex ที่ใช้เลือกตัวเลือกได้อย่างแม่นยำและรองรับดรอปดาวน์แบบเลือกหลายรายการ

  • 📦 นำเข้าแพ็กเกจ: นำ org.openqa.selenium.support.ui.Select เข้ามาและห่อหุ้ม WebElement ก่อนเรียกใช้เมธอดการเลือกใดๆ
  • 🎯 เลือกวิธีการที่เหมาะสม: เลือกใช้ selectByVisibleText, selectByValue หรือ selectByIndex โดยพิจารณาจากว่าข้อความที่แสดง คุณลักษณะค่า หรือตำแหน่งนั้นมีความเสถียรที่สุด
  • 🔁 จัดการเมนูแบบดรอปดาวน์ที่เลือกได้หลายรายการ: ใช้ isMultiple เพื่อตรวจจับตัวเลือกหลายรายการ และใช้ deselectAll หรือ deselectByVisibleText เพื่อล้างตัวเลือกก่อนหน้า
  • ✅ ตรวจสอบการเลือก: เรียกใช้เมธอด getFirstSelectedOption เพื่อยืนยันว่าการทดสอบได้เปลี่ยนสถานะของเมนูแบบดรอปดาวน์จริงหรือไม่
  • 🤖 ใช้ระบบระบุตำแหน่งด้วย AI: ตัวระบุตำแหน่ง AI ที่ซ่อมแซมตัวเองได้จะแก้ไข XPath ขององค์ประกอบที่เลือกที่เสียหายหลังจากมีการเปลี่ยนแปลง UI และรักษา...ping การทดสอบดรอปดาวน์มีความเสถียรในทุกเวอร์ชัน

เลือกค่าจากเมนูแบบดรอปดาวน์ใน Selenium

Select Class คืออะไรใน Selenium?

การขอ เลือกชั้นเรียนใน Selenium เป็นคลาสตัวช่วยจาก org.openqa.selenium.support.ui แพ็กเกจที่ช่วยให้ WebDriver สามารถโต้ตอบกับ HTML ได้ <select> องค์ประกอบต่างๆ โดยมีเมธอดสำหรับเลือกและยกเลิกการเลือกตัวเลือกโดยใช้ข้อความที่มองเห็นได้ ค่า หรือดัชนี รวมถึงตรวจจับว่าเมนูแบบดรอปดาวน์ยอมรับการเลือกหลายรายการหรือไม่

เพราะ Select เป็นประจำ Java คลาส คุณสร้างอินสแตนซ์ด้วย new คีย์เวิร์ดและส่ง WebElement ที่ชี้ไปยัง <select> แท็กบนหน้า

วิธีเลือกเมนูแบบเลื่อนลง Selenium

ก่อนที่จะจัดการกับเมนูแบบดรอปดาวน์ใน Seleniumต้องดำเนินการสองขั้นตอนดังนี้:

  1. นำเข้าแพ็คเกจ org.openqa.selenium.support.ui เลือก.
  2. สร้างอินสแตนซ์ของดรอปดาวน์เป็น Select วัตถุใน Selenium เว็บไดร์เวอร์

ตัวอย่างเช่น เปิด Mercury หน้าลงทะเบียนทัวร์ (https://demo.guru99.com/test/newtours/register.php) แล้วเลือกเมนูแบบเลื่อนลง “ประเทศ”

เลือกแบบเลื่อนลงใน Selenium

ขั้นตอนที่ 1) นำเข้าแพ็กเกจ Select

import org.openqa.selenium.support.ui.Select;

ขั้นตอนที่ 2) ประกาศองค์ประกอบแบบเลื่อนลงเป็นอินสแตนซ์ของคลาส Select ในตัวอย่างด้านล่าง อินสแตนซ์มีชื่อว่า drpCountry.

Select drpCountry = new Select(driver.findElement(By.name("country")));

ขั้นตอนที่ 3) เริ่มควบคุมเมนูแบบดรอปดาวน์ ใช้เมธอด Select ใดก็ได้เพื่อเลือกตัวเลือก ตัวอย่างด้านล่างเลือก “ANTARCTICA”:

drpCountry.selectByVisibleText("ANTARCTICA");

เลือกวิธีการใน Selenium

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

1) selectByVisibleText() และ deselectByVisibleText()

  • เลือกหรือยกเลิกการเลือกตัวเลือกที่มีข้อความที่แสดงตรงกับพารามิเตอร์
  • พารามิเตอร์: ข้อความที่แสดงสำหรับตัวเลือกนั้นอย่างถูกต้อง

ตัวอย่าง:

drpCountry.selectByVisibleText("ANTARCTICA");

2) selectByValue() และ deselectByValue()

  • เลือกหรือยกเลิกการเลือกตัวเลือกที่มี value คุณสมบัติตรงกับพารามิเตอร์
  • โปรดทราบว่าข้อความที่แสดงและ value คุณลักษณะมักจะแตกต่างกัน ดังแสดงด้านล่าง
  • พารามิเตอร์: ตัวเลือก value คุณลักษณะ

เลือกตามค่า และ ยกเลิกการเลือกตามค่า

ตัวอย่าง:

drpCountry.selectByValue("234");

3) selectByIndex() และ deselectByIndex()

  • เลือกหรือยกเลิกการเลือกตัวเลือกที่ดัชนีที่กำหนด ดัชนีเริ่มต้นที่ศูนย์
  • พารามิเตอร์: ดัชนีจำนวนเต็มของตัวเลือก

ตัวอย่าง:

drpCountry.selectByIndex(0);

4) isMultiple()

  • คืนสินค้า TRUE หากเมนูแบบดรอปดาวน์อนุญาตให้เลือกหลายรายการพร้อมกันได้ มิเช่นนั้นจะไม่อนุญาตให้เลือกหลายรายการพร้อมกัน FALSE.
  • พารามิเตอร์: ไม่มี.

ตัวอย่าง:

if (drpCountry.isMultiple()) {
    // do something here
}

5) deselectAll()

  • ล้างตัวเลือกที่เลือกทั้งหมด ใช้ได้เฉพาะกับเมนูแบบดรอปดาวน์ที่มีการเลือกหลายรายการเท่านั้น
  • พารามิเตอร์: ไม่มี.

ตัวอย่าง:

drpCountry.deselectAll();

สมบูรณ์ Code ของวิธีการเลือกใน Selenium

ดังต่อไปนี้ Java โปรแกรมนี้สาธิตการใช้งานคลาส Select บนเมนูแบบดรอปดาวน์ทั้งแบบเลือกรายการเดียวและแบบเลือกหลายรายการ

package newpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.By;

public class accessDropDown {
    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
        String baseURL = "https://demo.guru99.com/test/newtours/register.php";
        WebDriver driver = new FirefoxDriver();
        driver.get(baseURL);

        // Single-select drop-down
        Select drpCountry = new Select(driver.findElement(By.name("country")));
        drpCountry.selectByVisibleText("ANTARCTICA");

        // Multi-select drop-down
        driver.get("http://jsbin.com/osebed/2");
        Select fruits = new Select(driver.findElement(By.id("fruits")));
        fruits.selectByVisibleText("Banana");
        fruits.selectByIndex(1);
    }
}

การเลือกรายการในองค์ประกอบการเลือกหลายรายการ

การขอ selectByVisibleText() วิธีการนี้ยังใช้ได้กับเมนูแบบดรอปดาวน์ที่มีการเลือกหลายรายการ ตัวอย่างเช่น ใช้ https://jsbin.com/osebed/2 เป็นฐาน URLมันแสดงเมนูแบบดรอปดาวน์ที่สามารถเลือกได้หลายรายการพร้อมกัน

การเลือกรายการในองค์ประกอบการเลือกหลายรายการ

โค้ดด้านล่างนี้เลือกตัวเลือกสองข้อแรกโดยใช้ selectByVisibleText():

โค้ดการเลือกรายการในองค์ประกอบการเลือกหลายรายการ

ตารางอ้างอิงวิธีการ

ตารางนี้สรุปวิธีการทั้งหมดของคลาส Select ที่กล่าวถึงข้างต้น เพื่อให้ค้นหาได้ง่ายและรวดเร็ว

คำสั่ง Descriptไอออน
selectByVisibleText() / deselectByVisibleText() เลือกหรือยกเลิกการเลือกตัวเลือกโดยใช้ข้อความที่แสดง
selectByValue() / deselectByValue() เลือกหรือยกเลิกการเลือกตัวเลือกโดยใช้ตัวเลือกนั้น value คุณลักษณะ
selectByIndex() / deselectByIndex() เลือกหรือยกเลิกการเลือกตัวเลือกโดยใช้ดัชนีแบบนับศูนย์
isMultiple () ส่งคืนค่า TRUE หากเมนูแบบดรอปดาวน์อนุญาตให้เลือกได้หลายรายการ มิเช่นนั้นจะส่งคืนค่า FALSE
ยกเลิกการเลือกทั้งหมด() ยกเลิกการเลือกตัวเลือกทั้งหมดที่เคยเลือกไว้ก่อนหน้านี้ในเมนูแบบดรอปดาวน์ที่มีหลายตัวเลือก

ในการควบคุมกล่องดรอปดาวน์ ให้นำเข้า org.openqa.selenium.support.ui.Select สร้างแพ็กเกจก่อน จากนั้นสร้างอินสแตนซ์ Select และเรียกใช้เมธอดใดก็ได้จากด้านบน

คำถามที่พบบ่อย

คลาส Select คือ Selenium ตัวช่วยสำหรับองค์ประกอบ SELECT ใน HTML โดยจะห่อหุ้ม WebElement และแสดงตัวเลือก selectByVisibleText, selectByValue, selectByIndex, isMultiple และ deselectAll เพื่อการทำงานอัตโนมัติของเมนูแบบดรอปดาวน์ที่เรียบร้อย

ควรเลือกใช้ selectByValue เมื่อแอตทริบิวต์ค่าคงที่ เนื่องจากป้ายกำกับมักเปลี่ยนแปลงเพื่อการแปลภาษา ใช้ selectByVisibleText เมื่อข้อความเป็นค่าที่แน่นอน และหลีกเลี่ยงการใช้ selectByIndex เมื่อลำดับของตัวเลือกอาจเปลี่ยนแปลงได้

คลาส Select ใช้ได้เฉพาะกับแท็ก SELECT ใน HTML เท่านั้น หาก WebElement เป็น div, ul หรือวิดเจ็ตแบบกำหนดเองที่จัดรูปแบบให้ดูเหมือนเมนูแบบดรอปดาวน์ คุณต้องคลิกตัวเลือกผ่าน WebElement.click() หรือ Actions API แทน

เรียกเมธอด getFirstSelectedOption() บนอินสแตนซ์ Select และตรวจสอบค่า getText() ของมัน สำหรับดรอปดาวน์แบบเลือกหลายรายการ ให้วนซ้ำเมธอด getAllSelectedOptions() และเปรียบเทียบรายการที่ส่งคืนกับตัวเลือกที่คาดหวัง

ใช่แล้ว ใช้ isMultiple() เพื่อตรวจสอบว่าดรอปดาวน์อนุญาตให้เลือกหลายค่าหรือไม่ จากนั้นเรียกใช้ selectByVisibleText หลายๆ ครั้ง หรือ deselectAll() เพื่อรีเซ็ต ดรอปดาวน์แบบเลือกหลายค่าจำเป็นต้องกำหนดแอตทริบิวต์ multiple ในองค์ประกอบ HTML SELECT

ใช้ WebDriverWait ร่วมกับ ExpectedConditions.numberOfElementsToBeMoreThan ในตัวระบุตัวเลือก วิธีนี้จะช่วยให้มั่นใจได้ว่าดรอปดาวน์ที่เติมข้อมูลแบบอะซิงโครนัสพร้อมใช้งานก่อนที่จะสร้างอินสแตนซ์ของคลาส Select และเรียกใช้เมธอดการเลือกใดๆ

ตัวระบุตำแหน่งที่แก้ไขตัวเองได้ซึ่งขับเคลื่อนด้วย AI จะตรวจจับเมื่อรหัส ชื่อ หรือ XPath ขององค์ประกอบ SELECT เปลี่ยนแปลง และจะเปลี่ยนไปใช้ทางเลือกอื่นที่ใช้งานได้ ช่วยลดความล้มเหลวของเมนูแบบดรอปดาวน์ที่ไม่เสถียรในขั้นตอนการทำงานหลังจากการออกแบบ UI ใหม่

ใช่แล้ว ผู้ช่วยเขียนโค้ด AI จะแปลงคำขอภาษาอังกฤษธรรมดา เช่น “เลือกประเทศแอนตาร์กติกาในหน้าลงทะเบียน” ให้กลายเป็นอินสแตนซ์ Select ที่สมบูรณ์ พร้อมด้วยตัวระบุตำแหน่งที่ถูกต้อง การเรียกใช้ selectByVisibleText และการยืนยันความถูกต้อง

สรุปโพสต์นี้ด้วย: