Webองค์ประกอบใน Selenium

Webองค์ประกอบใน Selenium

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

เราจะดูวิธีเข้าถึงองค์ประกอบแบบฟอร์มต่างๆ เหล่านี้โดยใช้ Selenium เว็บไดร์เวอร์ด้วย Java. Selenium สรุปองค์ประกอบทุกรูปแบบเป็นวัตถุของ WebElement มี API เพื่อค้นหาองค์ประกอบและดำเนินการกับองค์ประกอบเหล่านั้น เช่น การป้อนข้อความลงในกล่องข้อความ การคลิกปุ่ม ฯลฯ เราจะดูวิธีการที่ใช้ได้ในการเข้าถึงองค์ประกอบแบบฟอร์มแต่ละองค์ประกอบ

ข้อมูลเบื้องต้นเกี่ยวกับ WebElement, findElement(), findElements()

Selenium Web Driver สรุปองค์ประกอบแบบฟอร์มอย่างง่ายเป็นวัตถุของ Webองค์ประกอบ

มีเทคนิคต่างๆ มากมายที่ WebDriver ระบุองค์ประกอบของฟอร์มตามคุณสมบัติที่แตกต่างกันขององค์ประกอบเว็บ เช่น ID, ชื่อ, คลาส, XPath, ชื่อแท็ก, ตัวเลือก CSS, ข้อความลิงก์ ฯลฯ

Web Driver มีวิธีการ WebElement สองวิธีต่อไปนี้เพื่อค้นหาองค์ประกอบ

  • ค้นหาองค์ประกอบ() – ค้นหาองค์ประกอบเว็บเดียวและส่งกลับเป็น WebElement Selenium วัตถุ.
  • ค้นหาองค์ประกอบ() – ส่งคืนรายการวัตถุ WebElement ที่ตรงกับเกณฑ์ตัวระบุตำแหน่ง

มาดูตัวอย่างโค้ดเพื่อรับองค์ประกอบเดียว - ฟิลด์ข้อความในหน้าเว็บเป็นออบเจ็กต์ของ WebElement โดยใช้เมธอด findElement() เราจะกล่าวถึงวิธีการ findElements() ในการค้นหาองค์ประกอบต่างๆ ในบทช่วยสอนครั้งต่อไป

ขั้นตอน 1) เราจำเป็นต้องนำเข้าแพ็คเกจนี้เพื่อสร้างออบเจ็กต์ของ Web Elements

ข้อมูลเบื้องต้นเกี่ยวกับ WebElement FindElement, FindElements

ขั้นตอน 2) เราจำเป็นต้องเรียกใช้เมธอด findElement() ที่มีอยู่ในคลาส WebDriver และรับอ็อบเจ็กต์ของ WebElement

ดูด้านล่างเพื่อดูว่ามันเสร็จสิ้นอย่างไร

Selenium ป้อนข้อความ

กล่องอินพุตจะอ้างอิงถึงประเภทใดประเภทหนึ่งจากสองประเภทนี้:

  1. ช่องข้อความ- Selenium กล่องข้อความอินพุตที่ยอมรับค่าที่พิมพ์และแสดงตามที่เป็น
  2. ช่องรหัสผ่าน– กล่องข้อความที่ยอมรับค่าที่พิมพ์ แต่ปกปิดไว้ด้วยชุดอักขระพิเศษ (โดยทั่วไปคือจุดและดอกจัน) เพื่อหลีกเลี่ยงการแสดงค่าละเอียดอ่อน

    Selenium ป้อนข้อความ

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

เมธอด findElement() รับพารามิเตอร์หนึ่งตัวซึ่งเป็นตัวระบุตำแหน่งไปยังองค์ประกอบ ตัวระบุตำแหน่งต่างๆ เช่น By.id(), By.name(), By.xpath(), By.CSSSelector() ฯลฯ ค้นหาองค์ประกอบในเพจโดยใช้คุณสมบัติ เช่น“““ id ชื่อหรือเส้นทาง เป็นต้น

คุณสามารถใช้ปลั๊กอิน เช่น Fire path เพื่อรับความช่วยเหลือในการรับ ID, xpath ฯลฯ ขององค์ประกอบต่างๆ

การใช้ไซต์ตัวอย่าง https://demo.guru99.com/test/login.html ด้านล่างนี้คือโค้ดสำหรับค้นหาช่องข้อความ “ที่อยู่อีเมล” โดยใช้ตัวระบุตำแหน่ง ID และช่อง “รหัสผ่าน” โดยใช้ตัวระบุตำแหน่งชื่อ

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

  1. ช่องข้อความอีเมล์จะอยู่ที่รหัส
  2. ฟิลด์รหัสผ่านตั้งอยู่ตามชื่อ

ส่งคีย์เข้า Selenium

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

วิธีใส่ข้อความ Selenium

หากต้องการป้อนข้อความลงในฟิลด์ข้อความและฟิลด์รหัสผ่าน sendKeys() เป็นวิธีการที่มีอยู่ใน WebElement ใน Selenium.

โดยใช้ตัวอย่างเดียวกันของ https://demo.guru99.com/test/login.html ต่อไปนี้คือวิธีที่เราค้นหาช่องข้อความและช่องรหัสผ่านและป้อนข้อความ Selenium.

ข้อความใน Selenium

  1. ค้นหาช่องข้อความ “ที่อยู่อีเมล” โดยใช้ตัวระบุ ID
  2. ค้นหาช่อง "รหัสผ่าน" โดยใช้ตัวระบุชื่อ
  3. ป้อนข้อความลงใน “ที่อยู่อีเมล” โดยใช้ Selenium วิธีการ sendkeys
  4. ป้อนรหัสผ่านในช่อง "รหัสผ่าน" โดยใช้เมธอด sendKeys()

การลบค่าในอินพุต Boxes

การขอ ชัดเจน() วิธีนี้ใช้ในการลบข้อความในกล่องอินพุต วิธีการนี้ไม่จำเป็นต้องมีพารามิเตอร์โค้ดสั้นๆ ด้านล่างนี้จะล้างข้อความจากช่องอีเมลหรือรหัสผ่าน

การลบค่าในอินพุต Boxes

Selenium คลิกปุ่ม

การขอ Selenium สามารถเข้าถึงปุ่มคลิกได้โดยใช้เมธอด click()

ในตัวอย่างข้างต้น

  1. ค้นหาปุ่มเพื่อลงชื่อเข้าใช้
  2. คลิกที่ปุ่ม "ลงชื่อเข้าใช้" ในหน้าเข้าสู่ระบบของเว็บไซต์เพื่อเข้าสู่ระบบเว็บไซต์

Selenium คลิกปุ่ม

Selenium ปุ่มส่ง

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

Selenium ปุ่มส่ง

เมื่อใช้ send() WebDriver จะค้นหา DOM เพื่อทราบว่าองค์ประกอบอยู่ในรูปแบบใด จากนั้นจึงทริกเกอร์ฟังก์ชัน send

กรอกรหัส

นี่คือรหัสการทำงานที่สมบูรณ์

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;		
import org.openqa.selenium.*;		

public class Form {				
    public static void main(String[] args) {									
    		
    	// declaration and instantiation of objects/variables		
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        String baseUrl = "https://demo.guru99.com/test/login.html";					
        driver.get(baseUrl);					

        // Get the WebElement corresponding to the Email Address(TextField)		
        WebElement email = driver.findElement(By.id("email"));							

        // Get the WebElement corresponding to the Password Field		
        WebElement password = driver.findElement(By.name("passwd"));							

        email.sendKeys("abcd@gmail.com");					
        password.sendKeys("abcdefghlkjl");					
        System.out.println("Text Field Set");					
         
        // Deleting values in the text box		
        email.clear();			
        password.clear();			
        System.out.println("Text Field Cleared");					

        // Find the submit button		
        WebElement login = driver.findElement(By.id("SubmitLogin"));							
                    		
        // Using click method to submit form		
        email.sendKeys("abcd@gmail.com");					
        password.sendKeys("abcdefghlkjl");					
        login.click();			
        System.out.println("Login Done with Click");					
        		
        //using submit method to submit the form. Submit used on password field		
        driver.get(baseUrl);					
        driver.findElement(By.id("email")).sendKeys("abcd@gmail.com");							
        driver.findElement(By.name("passwd")).sendKeys("abcdefghlkjl");							
        driver.findElement(By.id("SubmitLogin")).submit();					
        System.out.println("Login Done with Submit");					
         
		//driver.close();		
        		
    }		
}

การแก้ไขปัญหา

หากคุณพบ NoSuchElementException() ขณะค้นหาองค์ประกอบ แสดงว่าไม่พบองค์ประกอบนั้นในเพจ ณ จุดที่ไดรเวอร์เว็บเข้าถึงเพจ

  1. ตรวจสอบเครื่องระบุตำแหน่งของคุณอีกครั้งโดยใช้ Firepath หรือ Inspect Element ใน Chrome
  2. ตรวจสอบว่าค่าที่คุณใช้ในโค้ดแตกต่างจากค่าสำหรับองค์ประกอบใน Firepath ทันทีหรือไม่
  3. คุณสมบัติบางอย่างเป็นแบบไดนามิกสำหรับองค์ประกอบบางส่วน ในกรณีที่คุณพบว่าค่าแตกต่างกันและเปลี่ยนแปลงแบบไดนามิก ให้พิจารณาใช้ By.xpath() หรือ By.cssSelector() ซึ่งเป็นวิธีที่เชื่อถือได้มากกว่าแต่ซับซ้อนกว่า
  4. บางครั้งอาจเป็นปัญหาเรื่องการรอเช่นกัน เช่น เว็บไดรเวอร์รันโค้ดของคุณก่อนที่เพจจะโหลดเสร็จสมบูรณ์ เป็นต้น
  5. เพิ่มการรอก่อน findElement() โดยใช้การรอโดยนัยหรือชัดเจน

สรุป

  • ตารางด้านล่างสรุปคำสั่งในการเข้าถึงองค์ประกอบแต่ละประเภทที่กล่าวถึงข้างต้น
ธาตุ คำสั่ง Descriptไอออน
อินพุต Box sendKeys() ใช้ในการป้อนค่าลงในกล่องข้อความ
ชัดเจน() ใช้เพื่อล้างกล่องข้อความของค่าปัจจุบัน
การเชื่อมโยง คลิก() ใช้ในการคลิกลิงค์และรอให้โหลดเพจเสร็จก่อนจึงจะดำเนินการคำสั่งถัดไป
ส่งปุ่ม ส่ง()
  • WebDriver อนุญาตให้เลือกตัวเลือกมากกว่าหนึ่งตัวเลือกในองค์ประกอบ SELECT หลายรายการ
  • คุณสามารถใช้เมธอด send() กับองค์ประกอบใดๆ ภายในแบบฟอร์มได้ WebDriver จะทริกเกอร์ฟังก์ชันส่งของแบบฟอร์มที่เป็นขององค์ประกอบนั้นโดยอัตโนมัติ