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

Selenium Java ตัวอย่าง

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

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

Selenium โค้ดตัวอย่าง WebDriver

ด้านล่างนี้คือโค้ด 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 = "http://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 โค้ดตัวอย่างที่ตั้งองค์ประกอบตามรหัส 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() วิธีการแยกชื่อแท็กขององค์ประกอบเฉพาะที่มี ID เป็น “อีเมล” เมื่อเรียกใช้ โค้ดนี้ควรสามารถระบุชื่อแท็ก “อินพุต” ได้อย่างถูกต้องและจะพิมพ์ออกมา 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 โฟกัสไปที่เฟรมหรือหน้าต่างป๊อปอัปก่อนจึงจะสามารถเข้าถึงองค์ประกอบภายในได้ ให้เรายกตัวอย่างหน้าเว็บ http://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("http://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) ก่อนที่เราจะพิมพ์ข้อความ "บทช่วยสอน" ลงไป

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

เงื่อนไข

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

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

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

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

เงื่อนไข isDisplayed()

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

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

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

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

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

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

การใช้ ExpectedConditions alertIsPresent()

  • องค์ประกอบToBeClickable() – รอจนกระทั่งองค์ประกอบปรากฏให้เห็นและเปิดใช้งานในเวลาเดียวกัน ตัวอย่าง Selenium โค้ดด้านล่างจะรอจนกว่าองค์ประกอบที่มี id=”ชื่อผู้ใช้” จะปรากฏให้เห็นและเปิดใช้งานก่อนจึงจะกำหนดองค์ประกอบนั้นเป็นตัวแปร 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"

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

สรุป

  • หากต้องการเริ่มใช้ WebDriver API คุณต้องนำเข้าแพ็กเกจอย่างน้อย 2 แพ็กเกจนี้
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.Firefoxคนขับรถ
  • รางวัล get() วิธีการจะเทียบเท่ากับ Selenium คำสั่ง “open” ของ IDE
  • การค้นหาองค์ประกอบใน WebDriver ทำได้โดยใช้ findElement() วิธี
  • ต่อไปนี้เป็นตัวเลือกที่มีสำหรับการค้นหาองค์ประกอบใน WebDriver:
  • โดย.className
  • By.cssSelector
  • โดย.id
  • โดย.linkText
  • โดยชื่อ
  • โดย.partialLinkText
  • โดย.tagName
  • By.xpath
  • By.cssSelector() ไม่ สนับสนุน "ประกอบด้วย" ลักษณะ
  • คุณสามารถสร้างอินสแตนซ์องค์ประกอบโดยใช้คลาส WebElement
  • การคลิกที่องค์ประกอบทำได้โดยใช้ click() วิธี
  • WebDriver จัดเตรียมคำสั่งรับที่มีประโยชน์เหล่านี้:
  • รับ ()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver มีคำสั่งการนำทางที่มีประโยชน์เหล่านี้
  • นำทาง().ไปข้างหน้า()
  • นำทาง().กลับ()
  • นำทางไปยัง()
  • นำทาง().รีเฟรช()
  • ใช้วิธี close() และ quit() เพื่อปิดหน้าต่างเบราว์เซอร์ Close() ใช้เพื่อปิดหน้าต่างเดียว ในขณะที่ quit() ใช้เพื่อปิดหน้าต่างทั้งหมดที่เกี่ยวข้องกับหน้าต่างหลักที่วัตถุ WebDriver กำลังควบคุมอยู่
  • รางวัล switchTo().frame() และ switchTo().alert() วิธีการใช้เพื่อกำหนดทิศทางของ WebDriver ไปยังเฟรมหรือการแจ้งเตือนตามลำดับ
  • Implicit waits ใช้สำหรับตั้งเวลารอตลอดโปรแกรมในขณะที่ explicit waits ใช้เฉพาะบางส่วนเท่านั้น
  • คุณสามารถใช้ isEnabled(), isDisplayed(), isSelected() และการผสมผสานของ เว็บไดร์เวอร์รอสักครู่ และ เงื่อนไขที่คาดหวัง วิธีการตรวจสอบสถานะขององค์ประกอบ อย่างไรก็ตาม พวกเขาไม่ได้ตรวจสอบว่าไม่มีองค์ประกอบอยู่หรือไม่
  • เมื่อ isEnabled(), isDisplayed() หรือ isSelected() ถูกเรียกในขณะที่องค์ประกอบไม่มีอยู่ WebDriver จะส่ง NoSuchElementException.
  • เมื่อมีการเรียกเมธอด WebDriverWait และ ExpectedConditions ในขณะที่ไม่มีองค์ประกอบอยู่ WebDriver จะส่ง TimeoutException.

หมายเหตุ

driver.get():วิธีนี้ใช้เพื่อนำทางไปยังเว็บไซต์ใดเว็บไซต์หนึ่ง อย่างไรก็ตาม วิธีนี้จะไม่เก็บประวัติเบราว์เซอร์หรือคุกกี้ ดังนั้น ปุ่มไปข้างหน้าและข้างหลังจะไม่ทำงาน และการคลิกปุ่มเหล่านี้จะไม่กำหนดเวลาการนำทางหน้า

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

อ่านเพิ่มเติม readmore