Sử dụng class “myclass” mà chúng ta đã tạo ở phần trước, chúng ta hãy thử tạo một tập lệnh WebDriver sẽ:

  1. Tìm nạp trang chủ của Mercury Tours
  2. Xác minh tiêu đề
  3. In kết quả của sự so sánh
  4. Đóng nó lại trước khi kết thúc toàn bộ chương trình

1. WEBDRIVER CODE

Dưới đây là code WebDriver thực tiễn bởi logic hiện diện bởi kịch bản đã đề cập.

Lưu ý: Bắt đầu với Firefox 35, bạn cần dùng gecko driver được tạo bởi Mozilla để sử dụng Web Driver. Selenium 3.0, gecko và firefox có vấn đề tương hợp và thiết lập chúng chính xác có thể là một việc hơi khó. Nếu như code không chạy, hạ cấp về Firefox phiên bản 47 hoặc thấp hơn. Cách khác, bạn có thể chạy script trên Chrome. Selenium chạy trên box cho Chrome. Bạn chỉ cần đổi 3 dòng code để làm cho code của bạn chạy trên Chrome hoặc Firefox.

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();
       
    }
}

2. GIẢI THÍCH CODE

THÊM PACKAGE

Để bắt đầu, bạn cần thêm 2 package sau:

  1. org.openqa.selenium.*– chứa lớp WebDriver cần để khởi tạo một trình duyệt được tải với một driver chính xác.
  2. org.openqa.selenium.firefox.FirefoxDriver – chứa lớp FirefoxDriver cần để khởi tạo một Firefox-specific driver lên trên trình duyệt khởi tạo bởi lớp WedDriver.

Nếu bài kiểm tra của bạn cần các hành động phức tạp hơn như classs truy cập khác, chụp ảnh màn hình trình duyệt hoặc thao tác với các tệp bên ngoài, chắc chắn bạn sẽ cần thêm package.

KHỞI TẠO ĐỐI TƯỢNG VÀ BIẾN

Thông thường, đây là cách một đối tượng driver được khởi tạo.

Một lớp FirefoxDriver không có parameter nghĩa là profile mặc định của Firefox sẽ khởi chạy bởi chương trình Java của chúng ta. Profile Firefox mặc định tương tự như chạy Firefox ở chế độ safe mode (không tiện ích được chạy).

Cho việc thuận tiện, chúng ta lưu lại Base URL và mong đợi tiêu đề như là biến.

CHẠY PHIÊN TRÌNH DUYỆT

Hàm get() của WebDriver dùng để chạy một phiên trình duyệt mới và trực tiếp nó tới URL mà bạn đã khởi tạo nó như là parameter.

First Selenium Webdriver Script: JAVA Code Example

LẤY TIÊU ĐỀ TRANG MONG ĐỢI

Phương thức getTitle() của class WebDriver luôn luôn được dùng để đạt được tiêu đề trang hiện tại đã được tải.

First Selenium Webdriver Script: JAVA Code Example

SO SÁNH KẾT QUẢ MONG ĐỢI VÀ THỰC TẾ

Đoạn mã này chỉ sử dụng cấu trúc if-else cơ bản của Java để so sánh tiêu đề thực tế với tiêu đề mong đợi.

First Selenium Webdriver Script: JAVA Code Example

KẾT THÚC MỘT PHIÊN TRÌNH DUYỆT

Phương thức close() được dùng để đóng một cửa sổ trình duyệt

First Selenium Webdriver Script: JAVA Code Example

KẾT THÚC TOÀN BỘ CHƯƠNG TRÌNH

Nếu bạn dùng câu lệnh này mà không đóng tất cả cửa sổ trình duyệt trước, toàn bộ chương trình Java của bạn sẽ kết thúc trong khi vẫn mở cửa sổ trình duyệt.

First Selenium Webdriver Script: JAVA Code Example

CHẠY KIỂM TRA

Có 2 cách để chạy code trong Eclipse IDE,

  1. Ở trên thanh menu Eclipse, click Run > Run.
  2. Nhấn tổ hợp Ctrl+F11 để chạy toàn bộ code.
First Selenium Webdriver Script: JAVA Code Example

Nếu bạn làm chính xác mọi thứ, Eclipse sẽ xuất ra “Test Passed!”

VỊ TRÍ GUI ELEMENT

Vị trí các element trong WebDriver được thực hiện bằng cách dùng phương thức findElement(By.locator()). Phần “vị trí” của code giống như bất kỳ trình vị trí nào đã được thảo luận trước đây trong các chương Selenium IDE của các hướng dẫn này. Trong thực tế, bạn nên tìm vị trí các GUI element bằng IDE và sau khi xác định thành công, hãy xuất code sang WebDriver.

Đây là đoạn code mẫu Selenium mà vị trí của một element bởi một id. Facebook được dùng như là Base 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);
   }
}

Chúng ta đã sử dụng phương thức getTagName() để trích xuất tên thẻ của phần tử cụ thể có id là “email”. Khi chạy, code này sẽ có thể xác định chính xác tên thẻ “input” và sẽ in ra trên cửa sổ Console của Eclipse.

First Selenium Webdriver Script: JAVA Code Example

Tổng kết cho vị trí element

BiếnMô tảMẫu
By.classNameTìm các phần tử dựa trên giá trị của thuộc tính “class”findElement(By.className(“someClassName”))
By.cssSelectorTìm các phần tử dựa trên  CSS Selector engine của driverfindElement(By.cssSelector(“input#email”))
By.idVị trí các phần tử bởi giá trị thuộc tính “id” của chúngfindElement(By.id(“someId”))  
By.linkTextTìm một link phần tử bởi trích xuất văn bản mà nó hiển thịfindElement(By.linkText(“REGISTRATION”))  
By.nameVị trí các phần tử bởi giá trị thuộc tính “name”findElement(By.name(“someName”))  
By.partialLinkTextVị trí các phần tử có chứa văn bản liên kết đã chofindElement(By.partialLinkText(“REG”))  
By.tagNameVị trí các phần tử bởi tag name của chúngfindElement(By.tagName(“div”))  
By.xpathVị trí các phần tử thông qua XPathfindElement(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]”))

LƯU Ý KHI DÙNG FINDELEMENT(BY.CSSSELECTOR())

By.cssSelector() không hỗ trợ cho đặc điểm “cotains”. Như hình dưới

First Selenium Webdriver Script: JAVA Code Example

Trong Selenium IDE ở trên, toàn bộ bài kiểm tra đã vượt qua. Dù trong đoạn script Selenium WebDriver bên dưới, bài kiểm tra tạo ra một lỗi vì WebDriver không hỗ trợ cho từ khóa “contains” khi sử dụng By.cssSelector().

First Selenium Webdriver Script: JAVA Code Example

3. CÂU LỆNH PHỔ BIẾN

KHỞI TẠO WEB ELEMENT

Thay vì dùng cú pháp dài “driver.findElement(By.locator())” nhiều lần để bạn sẽ truy cập một phần tử cụ thể, chúng ta có thể dùng một đối tượng WebElement cho nó. Class WebElement đã có trong gói “org.openqa.selenium.*”.

First Selenium Webdriver Script: JAVA Code Example

Việc click vào có lẽ là cách phổ biến nhất để tương tác với các phần tử web. Phương thức click() được sử dụng để mô phỏng thao tác nhấp của bất kỳ phần tử nào. Ví dụ về Selenium Java sau đây cho thấy cách click() được sử dụng để nhấp vào nút “Sign-In” của Mercury Tours.

First Selenium Webdriver Script: JAVA Code Example

Theo dõi điều được lưu ý khi sử dụng phương thức click()

  • Nó không nhận bất kỳ tham số/đối số nào.
  • Phương pháp này sẽ tự động chờ tải một trang mới nếu có.
  • Phần tử được nhấp vào phải hiển thị (chiều cao và chiều rộng không được bằng 0).

LỆNH GET

Lệnh Get tìm nạp các thông tin quan trọng khác nhau về trang/phần tử. Dưới đây là một số lệnh “get” quan trọng mà bạn phải làm quen.

LệnhCách dùng
get()Nó tự động mở một cửa sổ trình duyệt mới và tìm nạp trang mà bạn chỉ định bên trong dấu ngoặc đơn.
Nó là bản sao của lệnh “open” của Selenium IDE.
Tham số phải là một đối tượng chuỗi.
getTitle()Không cần tham số
Tìm nạp tiêu đề của trang hiện tại
Khoảng trắng ở đầu và cuối được cắt bớt
Trả về một chuỗi rỗng nếu trang không có tiêu đề
getPageSource()Không cần tham số
Trả về mã nguồn của trang dưới dạng giá trị dạng chuỗi
getCurrentUrl()Không cần tham số
Tìm nạp chuỗi đại diện cho URL hiện tại mà trình duyệt đang xem
getText() Tìm nạp văn bản bên trong của phần tử mà bạn chỉ định

LỆNH NAVIGATE

Các lệnh này cho phép bạn làm mới, truy cập và chuyển đổi qua lại giữa các trang web khác nhau.

LệnhCách dùng
navigate().to()Nó tự động mở một cửa sổ trình duyệt mới và tìm nạp trang mà bạn chỉ định bên trong dấu ngoặc đơn.
Nó thực hiện chính xác những điều tương tự như phương thức get().
navigate().refresh() Không cần tham số.
Nó làm mới trang hiện tại.
navigate().back() Không cần tham số.
Đưa bạn trở lại một trang trong lịch sử của trình duyệt.
navigate().forward()Không cần tham số.
Đưa bạn đến một trang trong lịch sử của trình duyệt.

ĐÓNG VÀ THOÁT TÌNH DUYỆT

LệnhCách dùng
close()Không cần tham số.
Nó chỉ đóng cửa sổ trình duyệt hiện tại mà WebDiver đang điều khiển.
quit()Không cần tham số.
Đóng tất cả cửa sổ mà WebDriver đang mở.
First Selenium Webdriver Script: JAVA Code Example

Để minh họa rõ ràng sự khác biệt giữa close() và quit(), hãy thử thực thi đoạn mã dưới đây. Nó sử dụng một trang web tự động bật lên một cửa sổ khi tải trang và mở ra một cửa sổ khác sau khi thoát.

First Selenium Webdriver Script: JAVA Code Example

Lưu ý rằng chỉ có cửa sổ trình duyệt chính bị đóng chứ không phải hai cửa sổ bật lên.

First Selenium Webdriver Script: JAVA Code Example

Nhưng nếu bạn dùng quit(), tất cả cửa sổ sẽ bị đóng, không chỉ cửa sổ chính. Hãy chạy đoạn code dưới và bạn sẽ thấy rằng 2 cửa sổ pop-up sẽ tự động đóng.

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
    }
}

Để truy cập các phần tử GUI trong Khung, trước tiên chúng ta nên hướng WebDriver tập trung vào khung hoặc cửa sổ bật lên trước khi có thể truy cập các phần tử bên trong chúng. Ví dụ, chúng ta hãy lấy trang web http://demo.guru99.com/selenium/deprecated.html

First Selenium Webdriver Script: JAVA Code Example
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(); 
	    }
}

Sau khi chạy code này, bạn sẽ thấy khung “classFrame” được đưa đến trang “Deprecated API”, có nghĩa là mã của chúng ta đã có thể truy cập thành công liên kết “Deprecated”.

CHUYỂN ĐỔI GIỮA CÁC CỬA SỔ POP-UP

WebDriver cho phép các cửa sổ pop-up như cảnh báo được hiển thị, không giống như trong Selenium IDE. Để truy cập các phần tử bên trong cảnh báo (chẳng hạn như thông báo mà nó chứa), chúng ta phải sử dụng phương thức “switchTo().alert ()“. Trong đoạn mã dưới đây, chúng tôi sẽ sử dụng phương pháp này để truy cập hộp cảnh báo và sau đó truy xuất thông báo của nó bằng phương thức “getText()“, sau đó tự động đóng hộp cảnh báo bằng cách sử dụng phương thức “switchTo().alert().accept() “.

Trước tiên, hãy truy cập http://jsbin.com/usidix/1 và nhấp vào nút “Go!” ở đó và tự xem nội dung tin nhắn.

First Selenium Webdriver Script: JAVA Code Example

Hãy xem code ví dụ Selenium để thực hiện việc này

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();
       
    }
}

Trên bảng điều khiển Eclipse, lưu ý rằng thông báo cảnh báo đã in là

First Selenium Webdriver Script: JAVA Code Example

CHỜ ĐỢI

Có 2 loại chờ đợi

  • Chờ đợi ngầm: được sử dụng để đặt thời gian chờ mặc định trong suốt chương trình.
  • Chờ đợi rõ ràng: được sử dụng để đặt thời gian chờ chỉ cho một trường hợp cụ thể

CHỜ ĐỢI NGẦM

  • Nó đơn giản hơn để viết mã hơn là Chờ đợi rõ ràng.
  • Nó thường được khai báo trong phần khởi tạo của mã.
  • Bạn sẽ chỉ cần một package bổ sung để nhập.

Để bắt đầu sử dụng chế độ chờ ngầm, bạn sẽ phải thêm package này vào code của mình.

First Selenium Webdriver Script: JAVA Code Example

Sau đó, trên phần khởi tạo code của bạn, hãy thêm phần này.

First Selenium Webdriver Script: JAVA Code Example

CHỜ ĐỢI RÕ RÀNG

Chờ đợi rõ ràng được thực hiện bằng cách sử dụng các lớp WebDriverWait và ExpectedCondition. Đối với ví dụ sau về Selenium WebDriver, chúng ta sẽ đợi tối đa 10 giây để một phần tử có id là “username” hiển thị trước khi tiếp tục lệnh tiếp theo. Đây là các bước.

Bước 1: Thêm 2 package sau:

First Selenium Webdriver Script: JAVA Code Example

Bước 2: Khai báo một biến WebDriverWait. Trong ví dụ này, chúng ta sẽ sử dụng “myWaitVar” làm tên của biến.

First Selenium Webdriver Script: JAVA Code Example

Bước 3: Sử dụng myWaitVar với ExpectedConditions trên các phần mà bạn cần chờ đợi rõ ràng. Trong trường hợp này, chúng ta sẽ chờ đợi rõ ràng trên đầu vào “username” (Mercury Tours HomePage) trước khi chúng ta nhập văn bản “tutorial” vào đó.

First Selenium Webdriver Script: JAVA Code Example

ĐIỀU KIỆN

Theo dõi phương thức được dùng trong toán tử điều kiện và vòng lặp

isEnabled() được sử dụng khi bạn muốn xác minh xem một phần tử nhất định có được bật hay không trước khi thực hiện một lệnh.

First Selenium Webdriver Script: JAVA Code Example

isDisplayed() được sử dụng khi bạn muốn xác minh xem một phần tử nhất định có được hiển thị hay không trước khi thực hiện một lệnh.

First Selenium Webdriver Script: JAVA Code Example

isSelected() được sử dụng khi bạn muốn xác minh xem một check box, radio button hoặc tùy chọn trong drop-down box có được chọn hay không. Nó không hoạt động trên các phần tử khác.

First Selenium Webdriver Script: JAVA Code Example

SỬ DỤNG ĐIỀU KIỆN MONG ĐỢI

Class ExpectedConditions (Điều kiện mong đợi) cung cấp một tập hợp các điều kiện rộng hơn mà bạn có thể sử dụng cùng với phương thức Until() của WebDriverWait.

Dưới đây là một số phương thức ExpectedConditions phổ biến nhất.

alertIsPresent() – chờ đến khi hộp cảnh báo được hiển thị

First Selenium Webdriver Script: JAVA Code Example

elementToBeClickable() – Chờ đến khi một phần tử được nhìn thấy và trong cùng thời điểm, mở. Code Selenium mẫu bên dưới sẽ đợi cho đến khi phần tử có id = “username” hiển thị và được kích hoạt đầu tiên trước khi gán phần tử đó làm biến WebElement có tên “txtUserName”.

First Selenium Webdriver Script: JAVA Code Example

frameToBeAvailableAndSwitchToIt() – Chờ cho đến khi khung nhất định đã có sẵn, sau đó tự động chuyển sang khung đó.

First Selenium Webdriver Script: JAVA Code Example

BẮT TRƯỜNG HỢP NGOẠI LỆ

Khi sử dụng isEnabled(), isDisplayed() và isSelected(), WebDriver giả định rằng phần tử đã tồn tại trên trang. Nếu không, nó sẽ ném ra một NoSuchElementException. Để tránh điều này, chúng ta nên sử dụng khối try-catch để chương trình không bị gián đoạn.

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());
 }

Nếu bạn dùng chờ đợi rõ ràng, loại ngoại lệ mà bạn nên bắt là “TimeoutException”.

First Selenium Webdriver Script: JAVA Code Example

LƯU Ý

driver.get(): Nó được sử dụng để truy cập trang web cụ thể, nhưng nó không duy trì Lịch sử của trình duyệt và cookie, vì vậy, chúng ta không thể sử dụng nút chuyển tiếp và lùi, nếu chúng ta nhấp vào đó, trang sẽ không nhận được chương trình

driver.navigate (): nó được sử dụng để truy cập trang web cụ thể, nhưng nó duy trì lịch sử trình duyệt và cookie, vì vậy chúng tôi có thể sử dụng nút chuyển tiếp và lùi để điều hướng giữa các trang trong quá trình mã hóa Testcase.

Xem bài viết gốc Tiếng Anh tại đây.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Copy link
Powered by Social Snap