Selenium ไดรเวอร์เว็บ Java ตัวอย่างโปรแกรม

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

Selenium ไดรเวอร์เว็บ Java ตัวอย่างโปรแกรมจะแนะนำคุณเกี่ยวกับการเขียนสคริปต์การทำงานอัตโนมัติแบบครบวงจรเป็นครั้งแรก Lessเนื้อหาครอบคลุมการตั้งค่าสภาพแวดล้อม การระบุตำแหน่งองค์ประกอบ การส่งข้อมูลเข้า การนำทาง การตรวจสอบความถูกต้อง การรอ การจัดการข้อผิดพลาด และแนวทางปฏิบัติที่ดีที่สุดสำหรับการทดสอบ WebDriver ที่น่าเชื่อถือ

  • ⚙️ การตั้งค่าสภาพแวดล้อม: การติดตั้ง Java, Eclipse หรือ IntelliJ ตั้งค่า Selenium ไลบรารี และเลือกไฟล์ไบนารีไดรเวอร์ที่ถูกต้องสำหรับเวอร์ชันเบราว์เซอร์ของคุณ
  • 🧭 ตัวระบุตำแหน่งองค์ประกอบ: ใช้ ID, ชื่อ, คลาส, XPath, ตัวเลือก CSS และ linkText เพื่อระบุองค์ประกอบได้อย่างเสถียรในทุกเบราว์เซอร์และเวอร์ชัน
  • ⌨️ การกระทำและการป้อนข้อมูล: WebDriver รองรับการคลิก, sendKeys, submit, เลือกจากเมนูแบบดรอปดาวน์ และเหตุการณ์เกี่ยวกับแป้นพิมพ์ เพื่อการโต้ตอบแบบเต็มรูปแบบตามสไตล์ผู้ใช้
  • การรออย่างชาญฉลาด: แทนที่ Thread.sleep ด้วยการรอแบบโดยปริยาย โดยชัดแจ้ง และแบบลื่นไหลที่ขับเคลื่อนด้วย ExpectedConditions เพื่อกำจัดปัญหาการทดสอบที่ไม่เสถียร
  • 🚨 การจัดการข้อยกเว้น: ดักจับ NoSuchElementException, TimeoutException และ StaleElementReferenceException เพื่อให้ชุดทดสอบอัตโนมัติทำงานได้อย่างยืดหยุ่น
  • 🤖 การสร้างชุดทดสอบ AI: ผู้ช่วย AI สร้างสคริปต์ WebDriver พื้นฐาน แนะนำตัวระบุตำแหน่ง และแก้ไขตัวเลือกโดยอัตโนมัติเมื่อ DOM เปลี่ยนแปลง

Selenium ไดรเวอร์เว็บ Java โครงการ

Selenium Java ตัวอย่าง

การใช้ Java คลาส “myclass” ที่เราสร้างขึ้นในบทช่วยสอนก่อนหน้านี้ ให้เราลองสร้างสคริปต์ WebDriver ที่จะ:

ขั้นตอนที่ 1: นำมา Mercury หน้าแรกของทัวร์
ขั้นตอนที่ 2: ตรวจสอบชื่อของมัน
ขั้นตอนที่ 3: พิมพ์ผลการเปรียบเทียบออกมา
ขั้นตอนที่ 4: ปิดก่อนที่จะสิ้นสุดโปรแกรมทั้งหมด

Selenium ตัวอย่าง WebDriver Code

ด้านล่างนี้คือโค้ด WebDriver จริงสำหรับตรรกะที่นำเสนอโดยสถานการณ์ด้านบน

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

หมายเหตุ เริ่มแล้ว Firefox คุณต้องใช้ไดรเวอร์ตุ๊กแกที่สร้างโดย Mozilla เพื่อใช้งาน Web Driver Selenium 3.0, gecko และ firefox มีปัญหาเรื่องความเข้ากันได้ และการตั้งค่าให้ถูกต้องอาจกลายเป็นงานยาก หากโค้ดไม่ทำงาน ให้ดาวน์เกรดเป็น Firefox เวอร์ชัน 47 หรือต่ำกว่า หรือคุณสามารถเรียกใช้สคริปต์ของคุณบน Chrome Selenium ใช้งานได้ทันทีสำหรับ Chrome คุณเพียงแค่ต้องเปลี่ยนโค้ด 3 บรรทัดเพื่อให้สคริปต์ของคุณทำงานกับ Chrome ได้ Firefox

อธิบายรหัส

การนำเข้าแพ็คเกจ

ในการเริ่มต้น คุณต้องนำเข้าแพ็คเกจสองรายการต่อไปนี้:

  1. org.openqa.selenium.*– มีคลาส WebDriver ที่จำเป็นในการสร้างอินสแตนซ์เบราว์เซอร์ใหม่ที่โหลดพร้อมไดรเวอร์เฉพาะ
  2. org.openqa.selenium.firefox.Firefoxคนขับรถ – ประกอบด้วย Firefoxคลาสไดรเวอร์ที่จำเป็นในการสร้างอินสแตนซ์ Firefox- ไดรเวอร์เฉพาะบนเบราว์เซอร์ที่สร้างอินสแตนซ์โดยคลาส WebDriver

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

การสร้างอินสแตนซ์ของวัตถุและตัวแปร

โดยปกติ นี่คือวิธีการสร้างอินสแตนซ์ของวัตถุไดรเวอร์

WebDriver driver = new FirefoxDriver();

A Firefoxคลาสไดร์เวอร์ที่ไม่มีพารามิเตอร์หมายความว่าเป็นค่าเริ่มต้น Firefox โปรไฟล์ของเราจะถูกเปิดตัวโดย Java โปรแกรม ค่าเริ่มต้น Firefox โปรไฟล์คล้ายกับการเปิดตัว Firefox ในเซฟโหมด (ไม่ได้โหลดส่วนขยาย)

เพื่อความสะดวก เราจึงบันทึกฐานข้อมูลไว้ URL และชื่อเรื่องที่คาดหวังไว้เป็นตัวแปร

การเปิดตัวเซสชันเบราว์เซอร์

เว็บไดร์เวอร์ รับ () วิธีนี้ใช้เพื่อเริ่มเซสชันเบราว์เซอร์ใหม่และนำทางไปยัง URL ที่คุณระบุเป็นพารามิเตอร์ของมัน

driver.get(baseUrl);

รับชื่อหน้าจริง

คลาส WebDriver มี getTitle () วิธีการที่ใช้เสมอเพื่อรับชื่อหน้าของหน้าที่โหลดในปัจจุบัน

actualTitle = driver.getTitle();

เปรียบเทียบค่าที่คาดหวังและค่าจริง

โค้ดส่วนนี้ใช้พื้นฐานเพียงอย่างเดียว Java โครงสร้าง if-else เพื่อเปรียบเทียบชื่อจริงกับชื่อที่คาดหวัง

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

การยุติเซสชันเบราว์เซอร์

"ปิด()” ใช้เพื่อปิดหน้าต่างเบราว์เซอร์

driver.close();

การยุติโปรแกรมทั้งหมด

หากคุณใช้คำสั่งนี้โดยไม่ปิดหน้าต่างเบราว์เซอร์ทั้งหมดก่อน Java โปรแกรมจะสิ้นสุดในขณะที่เปิดหน้าต่างเบราว์เซอร์ทิ้งไว้

System.exit(0);

เรียกใช้การทดสอบ

มีสองวิธีในการรันโค้ด Eclipse ไอดี.

  1. On Eclipseแถบเมนูของ คลิก วิ่ง > วิ่ง
  2. ข่าวประชาสัมพันธ์ Ctrl + F11 เพื่อรันโค้ดทั้งหมด

เรียกใช้การทดสอบ

หากคุณทำทุกอย่างถูกต้อง Eclipse จะแสดงผลว่า "Test Passed!"

เรียกใช้การทดสอบ

การค้นหาองค์ประกอบ GUI

การค้นหาองค์ประกอบใน WebDriver ทำได้โดยใช้ปุ่ม “ค้นหาองค์ประกอบ (โดย.ระบุตำแหน่ง-" วิธี. ส่วน “ตัวระบุตำแหน่ง” ของโค้ดจะเหมือนกับตัวระบุตำแหน่งใดๆ ที่กล่าวถึงก่อนหน้านี้ใน Selenium IDE บทต่างๆ ของบทช่วยสอนเหล่านี้ ที่จริงแล้ว ขอแนะนำให้คุณค้นหาองค์ประกอบ GUI โดยใช้ IDE และเมื่อระบุได้สำเร็จแล้ว ให้ส่งออกโค้ดไปยัง WebDriver

ที่นี่คือ Selenium ตัวอย่างโค้ดที่ใช้ค้นหาองค์ประกอบโดยใช้ ID โดยใช้ Facebook เป็นฐานข้อมูล URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

เราใช้ getTagName() วิธีการยกtracโค้ดนี้จะระบุชื่อแท็กขององค์ประกอบนั้นที่มี id เป็น “email” เมื่อรันแล้ว โค้ดควรจะสามารถระบุชื่อแท็ก “input” ได้อย่างถูกต้องและจะพิมพ์ออกมา Eclipseหน้าต่างคอนโซลของ

การค้นหาองค์ประกอบ GUI

สรุปการหาตำแหน่งองค์ประกอบ

การเปลี่ยนแปลง Descriptไอออน ตัวอย่าง
โดย.className ค้นหาองค์ประกอบตามค่าของแอตทริบิวต์ "คลาส" findElement(By.className(“someClassName”))
By.cssSelector ค้นหาองค์ประกอบตามเอ็นจิ้น CSS Selector พื้นฐานของไดรเวอร์ findElement(By.cssSelector(“อินพุต#อีเมล”))
โดย.id ค้นหาองค์ประกอบตามค่าของแอตทริบิวต์ "id" findElement(By.id("someId"))
 
โดย.linkText ค้นหาองค์ประกอบลิงก์ตามข้อความที่แสดง findElement (By.linkText (“การลงทะเบียน”))
 
โดยชื่อ ค้นหาองค์ประกอบตามค่าของแอตทริบิวต์ "ชื่อ" findElement(By.name("ชื่อบางคน"))
 
โดย.partialLinkText ค้นหาองค์ประกอบที่มีข้อความลิงก์ที่กำหนด findElement (By.partialLinkText (“REG”))
 
โดย.tagName ค้นหาองค์ประกอบตามชื่อแท็ก findElement(By.tagName("div"))
 
By.xpath ค้นหาองค์ประกอบผ่าน XPath findElement(By.xpath(“//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”))

หมายเหตุเกี่ยวกับการใช้ findElement(By.cssSelector())

By.cssSelector() ไม่รองรับฟีเจอร์ "มี" พิจารณา Selenium รหัส IDE ด้านล่าง –

หมายเหตุเกี่ยวกับการใช้ findElement(By.cssSelector())

In Selenium IDE ข้างต้นผ่านการทดสอบทั้งหมด อย่างไรก็ตามใน Selenium สคริปต์ WebDriver ด้านล่าง การทดสอบเดียวกันนี้สร้างข้อผิดพลาดเนื่องจาก WebDriver ไม่รองรับคีย์เวิร์ด "contains" เมื่อใช้ในเมธอด By.cssSelector()

หมายเหตุเกี่ยวกับการใช้ findElement(By.cssSelector())

คำสั่งทั่วไป

การสร้างอินสแตนซ์องค์ประกอบเว็บ

แทนที่จะใช้รูปแบบยาว “driver.findElement(By.locator())” ทุกครั้งที่คุณจะเข้าถึงองค์ประกอบใดองค์ประกอบหนึ่ง เราสามารถสร้างอินสแตนซ์ของอ็อบเจ็กต์ WebElement สำหรับองค์ประกอบนั้นได้ คลาส WebElement อยู่ในแพ็คเกจ “org.openqa.selenium.*”

การสร้างอินสแตนซ์องค์ประกอบเว็บ

คลิกที่องค์ประกอบ

การคลิกอาจเป็นวิธีที่ใช้กันทั่วไปในการโต้ตอบกับองค์ประกอบต่างๆ ของเว็บ ที่ click() วิธีนี้ใช้เพื่อจำลองการคลิกขององค์ประกอบใด ๆ ดังต่อไปนี้ Selenium Java ตัวอย่างแสดงให้เห็นว่าอย่างไร click() ใช้ในการคลิก Mercury ปุ่ม "ลงชื่อเข้าใช้" ของ Tours

คลิกที่องค์ประกอบ

สิ่งที่ต้องสังเกตต่อไปนี้เมื่อใช้เมธอด click()

  • ไม่ใช้พารามิเตอร์/อาร์กิวเมนต์ใดๆ
  • วิธีการนี้จะรอให้โหลดหน้าใหม่โดยอัตโนมัติ หากมี
  • ต้องมองเห็นองค์ประกอบที่จะคลิกได้ (ความสูงและความกว้างต้องไม่เท่ากับศูนย์)

รับคำสั่ง

รับคำสั่งดึงข้อมูลสำคัญต่างๆ เกี่ยวกับเพจ/องค์ประกอบ ต่อไปนี้เป็นคำสั่ง "get" ที่สำคัญที่คุณต้องคุ้นเคย

คำสั่ง การใช้
รับ ()

การใช้ตัวอย่าง:

  • โดยจะเปิดหน้าต่างเบราว์เซอร์ใหม่โดยอัตโนมัติและดึงข้อมูลหน้าเว็บที่คุณระบุภายในวงเล็บ
  • มันเป็นคู่ของ Selenium คำสั่ง “open” ของ IDE
  • พารามิเตอร์จะต้องเป็น เชือก วัตถุ.
getTitle ()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • ดึงข้อมูลชื่อเรื่องของหน้าปัจจุบัน
  • ช่องว่างสีขาวนำหน้าและต่อท้ายถูกตัดออก
  • ส่งกลับสตริงว่างหากเพจไม่มีชื่อเรื่อง
getPageSource()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • ส่งกลับซอร์สโค้ดของเพจเป็นค่าสตริง
getCurrentUrl()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • ดึงสตริงที่แสดงถึงสถานะปัจจุบัน URL ที่เบราว์เซอร์กำลังดูอยู่
getText ()

การใช้ตัวอย่าง:

  • ดึงข้อความภายในขององค์ประกอบที่คุณระบุ

นำทางคำสั่ง

คำสั่งเหล่านี้ช่วยให้คุณสามารถรีเฟรช เข้าไปและสลับไปมาระหว่างหน้าเว็บต่างๆ

นำทางไปยัง()

การใช้ตัวอย่าง:

  • โดยจะเปิดหน้าต่างเบราว์เซอร์ใหม่โดยอัตโนมัติและดึงข้อมูลหน้าเว็บที่คุณระบุภายในวงเล็บ
  • มันทำสิ่งเดียวกันกับ get() วิธี
นำทาง().รีเฟรช()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • มันจะรีเฟรชหน้าปัจจุบัน
นำทาง().กลับ()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • นำคุณย้อนกลับไปหนึ่งหน้าในประวัติของเบราว์เซอร์
นำทาง().ไปข้างหน้า()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • นำคุณไปข้างหน้าหนึ่งหน้าในประวัติของเบราว์เซอร์

การปิดและออกจากเบราว์เซอร์ Windows

ปิด()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • โดยจะปิดเฉพาะหน้าต่างเบราว์เซอร์ที่ WebDriver ควบคุมอยู่เท่านั้น
เลิก()

การใช้ตัวอย่าง:

  • ไม่จำเป็นต้องมีพารามิเตอร์
  • จะปิดหน้าต่างทั้งหมดที่ WebDriver เปิดไว้

การปิดและออกจากเบราว์เซอร์ Windows

เพื่อแสดงให้เห็นความแตกต่างระหว่างกันอย่างชัดเจน close() และ quit()ให้ลองรันโค้ดด้านล่างนี้ ใช้หน้าเว็บที่ปรากฏขึ้นหน้าต่างโดยอัตโนมัติเมื่อโหลดหน้าเว็บและเปิดขึ้นอีกหน้าต่างหนึ่งหลังจากออก

การปิดและออกจากเบราว์เซอร์ Windows

สังเกตว่ามีเฉพาะหน้าต่างเบราว์เซอร์หลักเท่านั้นที่ถูกปิด และไม่ได้ปิดหน้าต่างป็อปอัปทั้งสองหน้าต่าง

การปิดและออกจากเบราว์เซอร์ Windows

แต่หากคุณใช้ quit() หน้าต่างทั้งหมดจะถูกปิดลง ไม่ใช่แค่หน้าต่างหลักเท่านั้น ลองรันโค้ดด้านล่างแล้วคุณจะสังเกตเห็นว่าหน้าต่างป๊อปอัปทั้งสองหน้าต่างด้านบนจะถูกปิดลงโดยอัตโนมัติเช่นกัน

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

การสลับระหว่างเฟรม

ในการเข้าถึงองค์ประกอบ GUI ใน Frame เราควรสั่งให้ WebDriver โฟกัสไปที่เฟรมหรือหน้าต่างป๊อปอัปก่อนจึงจะสามารถเข้าถึงองค์ประกอบภายในได้ ให้เรายกตัวอย่างหน้าเว็บ https://demo.guru99.com/selenium/deprecated.html

การสลับระหว่างเฟรม

หน้านี้มี 3 เฟรมซึ่งมีแอตทริบิวต์ "ชื่อ" ระบุไว้ด้านบน เราต้องการเข้าถึงลิงก์ "เลิกใช้แล้ว" ที่ล้อมรอบด้านบนด้วยสีเหลือง ในการทำเช่นนั้น เราต้องสั่งให้ WebDriver สลับไปที่เฟรม "classFrame" ก่อนโดยใช้ “switchTo().frame()” วิธี. เราจะใช้แอตทริบิวต์ชื่อของเฟรมเป็นพารามิเตอร์สำหรับส่วน "frame()"

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

หลังจากรันโค้ดนี้ คุณจะเห็นว่าเฟรม "classFrame" ถูกนำไปที่หน้า "Deprecated API" ซึ่งหมายความว่าโค้ดของเราสามารถเข้าถึงลิงก์ "Deprecated" ได้สำเร็จ

การสลับระหว่างป๊อปอัป Windows

WebDriver อนุญาตให้แสดงหน้าต่างป๊อปอัป เช่น การแจ้งเตือน ซึ่งแตกต่างจาก Selenium ไอดี ในการเข้าถึงองค์ประกอบภายในการแจ้งเตือน (เช่นข้อความที่มีอยู่) เราต้องใช้ "switchTo().alert()" วิธีการ ในโค้ดด้านล่าง เราจะใช้วิธีการนี้เพื่อเข้าถึงกล่องแจ้งเตือนและดึงข้อความโดยใช้ "getText()" วิธีการแล้วจึงปิดกล่องแจ้งเตือนอัตโนมัติโดยใช้ "switchTo().alert().accept()" วิธี

ก่อนอื่นให้มุ่งหน้าไปที่ https://output.jsbin.com/usidix/1 และคลิก "ไป!" ด้วยตนเอง ปุ่มที่นั่นและดูข้อความด้วยตัวคุณเอง

การสลับระหว่างป๊อปอัป Windows

มาดูกัน Selenium โค้ดตัวอย่างเพื่อทำสิ่งนี้-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

เกี่ยวกับ Eclipse console โปรดสังเกตว่าข้อความแจ้งเตือนที่พิมพ์ออกมาคือ:

การสลับระหว่างป๊อปอัป Windows

รอ

การรอมีสองประเภท

  1. การรอโดยนัย – ใช้เพื่อตั้งค่าเวลารอเริ่มต้นตลอดทั้งโปรแกรม
  2. การรออย่างชัดเจน – ใช้เพื่อตั้งเวลารอสำหรับอินสแตนซ์เฉพาะเท่านั้น

รอโดยปริยาย

  • โค้ดง่ายกว่า Explicit Waits
  • โดยปกติจะมีการประกาศในส่วนการสร้างอินสแตนซ์ของโค้ด
  • คุณจะต้องมีแพ็คเกจเพิ่มเติมเพียงแพ็คเกจเดียวเพื่อนำเข้า

หากต้องการเริ่มใช้การรอโดยนัย คุณจะต้องนำเข้าแพ็คเกจนี้ลงในโค้ดของคุณ

รอโดยปริยาย

จากนั้นในส่วนการสร้างอินสแตนซ์ของโค้ดของคุณ ให้เพิ่มส่วนนี้

รอโดยปริยาย

รออย่างชัดแจ้ง

การรอที่ชัดเจนเสร็จสิ้นโดยใช้คลาส WebDriverWait และ ExpectedCondition. สำหรับสิ่งต่อไปนี้ Selenium ตัวอย่าง WebDriver เราจะรอนานถึง 10 วินาทีเพื่อให้องค์ประกอบที่มี ID เป็น "ชื่อผู้ใช้" ปรากฏให้เห็นก่อนที่จะดำเนินการคำสั่งถัดไป นี่คือขั้นตอน

ขั้นตอนที่ 1:

นำเข้าแพ็คเกจทั้งสองนี้:

รออย่างชัดแจ้ง

ขั้นตอนที่ 2:

ประกาศตัวแปร WebDriverWait ในตัวอย่างนี้ เราจะใช้ “myWaitVar” เป็นชื่อของตัวแปร

รออย่างชัดแจ้ง

ขั้นตอนที่ 3:

ใช้ myWaitVar กับ ExpectedConditions ในส่วนที่คุณต้องการให้มีการรออย่างชัดเจน ในกรณีนี้ เราจะใช้การรออย่างชัดเจนใน “ชื่อผู้ใช้” (Mercury Tours HomePage) ก่อนที่เราจะพิมพ์ข้อความ "บทช่วยสอน" ลงไป

รออย่างชัดแจ้ง

เงื่อนไขเพิ่มเติมสำหรับการขอคืนเงิน (Refund Policy)

วิธีการต่อไปนี้ใช้ในเงื่อนไขและการค้นหาping การดำเนินงาน —

  • เปิดใช้งาน() ใช้เมื่อคุณต้องการตรวจสอบว่ามีการเปิดใช้งานองค์ประกอบบางอย่างหรือไม่ก่อนที่จะดำเนินการคำสั่ง

เงื่อนไขคือเปิดใช้งาน()

  • แสดงอยู่() ใช้เมื่อคุณต้องการตรวจสอบว่ามีการแสดงองค์ประกอบบางอย่างหรือไม่ ก่อนที่จะดำเนินการคำสั่ง

เงื่อนไข isDisplayed()

  • ถูกเลือก() ใช้เมื่อคุณต้องการตรวจสอบว่ามีบางอย่างหรือไม่ ช่องกาเครื่องหมาย ปุ่มตัวเลือก หรือตัวเลือกในกล่องแบบดรอปดาวน์ ถูกเลือก มันใช้ไม่ได้กับองค์ประกอบอื่น

เงื่อนไขคือเลือก()

การใช้เงื่อนไขที่คาดหวัง

คลาส ExpectedConditions เสนอชุดเงื่อนไขที่กว้างขึ้นซึ่งคุณสามารถใช้ร่วมกับเมธอดของ WebDriverWait จนถึง()

ด้านล่างนี้คือวิธี ExpectedConditions ที่พบบ่อยที่สุดบางส่วน

  • alertIsPresent () – รอจนกว่าจะมีกล่องแจ้งเตือนปรากฏขึ้น

การใช้ ExpectedConditions alertIsPresent()

  • องค์ประกอบToBeClickable() – รอจนกระทั่งองค์ประกอบปรากฏให้เห็นและเปิดใช้งานในเวลาเดียวกัน ตัวอย่าง Selenium Code โค้ดด้านล่างจะรอจนกว่าองค์ประกอบที่มี id="username" จะปรากฏและใช้งานได้ก่อน จึงจะกำหนดองค์ประกอบนั้นเป็นตัวแปร WebElement ที่ชื่อว่า "txtUserName"

การใช้เงื่อนไขที่คาดหวัง

  • frameToBeAvailableAndSwitchToIt() – รอจนกระทั่งเฟรมที่กำหนดพร้อมใช้งานแล้วจึงสลับไปที่เฟรมนั้นโดยอัตโนมัติ

การใช้องค์ประกอบExpectedConditionsToBeClickable()

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

เมื่อใช้ isEnabled(), isDisplayed() และ isSelected() WebDriver จะถือว่าองค์ประกอบนั้นมีอยู่ในหน้าอยู่แล้ว มิฉะนั้น จะแสดงข้อผิดพลาด NoSuchElementException- เพื่อหลีกเลี่ยงปัญหานี้ เราควรใช้บล็อก try-catch เพื่อว่าโปรแกรมจะไม่ถูกขัดจังหวะ

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

หากคุณใช้การรออย่างชัดเจน ประเภทของข้อยกเว้นที่คุณควรจับคือ "TimeoutException"

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

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

ติดตั้ง JDK และ IDE เช่น Eclipse หรือ IntelliJ, Selenium Java ไลบรารี และไดรเวอร์เบราว์เซอร์ที่ตรงกัน เครื่องมือสร้างอัตโนมัติ เช่น Maven หรือ Gradle ลดความซับซ้อนในการจัดการความสัมพันธ์ระหว่างไฟล์

AI สามารถแก้ไขข้อผิดพลาดของตัวระบุตำแหน่งโดยอัตโนมัติ สร้างกรณีทดสอบจากเรื่องราวของผู้ใช้ และระบุการทดสอบที่ไม่เสถียร แพลตฟอร์มต่างๆ เช่น TestimMabl และ Applitools ผสานรวม AI เพื่อการสร้าง การดำเนินการ และการตรวจสอบความถูกต้องด้วยภาพที่ชาญฉลาดกว่า

ใช่แล้ว GitHub Copilot, Cursor และ JetBrains AI สร้าง Java Selenium สคริปต์ที่เขียนด้วยภาษาธรรมดา ประกอบด้วยคำสั่งรอ การยืนยัน และออบเจ็กต์เพจ ช่วยลดความซ้ำซ้อนของโค้ดสำหรับสถานการณ์ทดสอบใหม่ๆ ได้อย่างมาก

findElement จะคืนค่า WebElement ที่ตรงกันตัวแรก หรือโยนข้อยกเว้น NoSuchElementException findElements จะคืนค่ารายการของ WebElement ที่ตรงกันทั้งหมด และจะคืนค่ารายการว่างหากไม่พบ WebElement ใดๆ โดยจะไม่โยนข้อยกเว้นใดๆ

Thread.sleep จะหยุดการทำงานชั่วคราวเป็นระยะเวลาคงที่ โดยไม่คำนึงถึงสถานะของหน้าเว็บ ซึ่งจะทำให้การทำงานที่รวดเร็วช้าลง และทำให้การทำงานที่ช้าล้มเหลว ควรใช้ WebDriverWait ร่วมกับ ExpectedConditions เพื่อรอเฉพาะระยะเวลาที่จำเป็นเท่านั้น

Selenium รองรับ ChromeDriver และ GeckoDriver Firefoxรวมถึง EdgeDriver, SafariDriver และ IEDriverServer ด้วย Selenium โปรแกรม Manager เวอร์ชัน 4 จะดาวน์โหลดไดรเวอร์ที่ถูกต้องโดยอัตโนมัติ

กำหนดค่า ChromeOptions หรือ Firefoxอ็อบเจ็กต์ Options ที่มี setAcceptInsecureCerts(true) จะบอกให้เบราว์เซอร์ละเว้นใบรับรองที่ไม่ถูกต้อง เพื่อให้เซสชัน WebDriver สามารถดำเนินการต่อไปได้

WebDriverManager จะดาวน์โหลดและกำหนดค่าไบนารีไดรเวอร์เบราว์เซอร์ที่ถูกต้องสำหรับเวอร์ชันเบราว์เซอร์ที่ติดตั้งโดยอัตโนมัติ ช่วยลดการบำรุงรักษาไดรเวอร์ด้วยตนเองและลดเวลาในการตั้งค่าสำหรับผู้ร่วมพัฒนาใหม่

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