Tech

Tập lệnh ví dụ selenium Webdriver Scrip

Ví dụ

Sử dụng class Java “myclass” codechúng tôi đã tạo trong hướng dẫ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 đề của nó
  3. in ra kết quả so sánh
  4. đóng nó trước khi kết thúc toàn bộ chương trình.
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();
       
    }

}

code WebDriver

Dưới đây là codeWebDriver thực tế cho logic được trình bày bởi tình huống trên

Lưu ý: Khởi động Firefox 35, bạn cần sử dụng trình điều khiển gecko do Mozilla tạo để sử dụng Trình điều khiển web. Selenium 3.0, gecko và firefox có vấn đề về khả năng tương thích và việc thiết lập chúng một cách chính xác có thể trở thành một nhiệm vụ khó khăn. Nếu codekhông hoạt động, hãy hạ cấp xuống Firefox phiên bản 47 trở xuống. Ngoài ra, bạn có thể chạy các tập lệnh của mình trên Chrome. Selenium hoạt động hiệu quả cho Chrome. Bạn chỉ cần thay đổi 3 dòng codeđể làm cho tập lệnh của bạn hoạt động với Chrome hoặc Firefox

Giải thích mã

Nhập các gói

Để bắt đầu, bạn cần nhập hai gói sau:

  1. org.openqa.selenium. * – chứa class WebDriver cần thiết để khởi tạo một trình duyệt mới được tải bằng một trình điều khiển cụ thể
  2. org.openqa.selenium.firefox.FirefoxDriver – chứa class FirefoxDriver cần thiết để khởi tạo trình điều khiển dành riêng cho Firefox trên trình duyệt do class WebDriver khởi tạo

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ư truy cập class 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 nhập thêm gói.

Khởi tạo các đối tượng và biến

Thông thường, đây là cách một đối tượng trình điều khiển được khởi tạo.

class FirefoxDriver không có tham số có nghĩa là cấu hình Firefox mặc định sẽ được khởi chạy bởi chương trình Java của chúng tôi. Cấu hình Firefox mặc định tương tự như khởi chạy Firefox ở chế độ an toàn (không có phần mở rộng nào được tải).

Để thuận tiện, chúng tôi đã lưu URL cơ sở và tiêu đề dự kiến ​​dưới dạng các biến.

Khởi chạy một phiên trình duyệt

Phương thức get () của WebDriver được sử dụng để khởi chạy một phiên trình duyệt mới và hướng nó đến URL codebạn chỉ định làm tham số của nó.

Lấy tiêu đề trang thực tế

class WebDriver có phương thức getTitle () luôn được sử dụng để lấy tiêu đề trang của trang hiện đang được tải.

So sánh giá trị mong đợi và giá trị thực tế

Phần codenà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.

Kết thúc phiên trình duyệt

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

Chấm dứt Toàn bộ Chương trình

Nếu bạn sử dụng lệnh này codekhông đóng tất cả cá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.

Chạy thử nghiệm

Có hai cách để thực thi codetrong Eclipse IDE.

  1. Trên thanh menu của Eclipse, bấm Chạy> Chạy.
  2. Nhấn Ctrl + F11 để chạy toàn bộ mã.

 Nếu bạn làm đúng mọi thứ, Eclipse sẽ xuất ra “Đã vượt qua thử nghiệm!”

Định vị các phần tử GUI

Định vị các phần tử trong WebDriver được thực hiện bằng cách sử dụng phương thức ” findElement (By. Locator ()) “. Phần “định vị” của codegiống như bất kỳ trình định vị nào đã thảo luận trước đây trong các chương Selenium IDE của các hướng dẫn này. Infact, bạn nên xác định vị trí các phần tử GUI bằng IDE và sau khi xác định thành công, hãy xuất codesang WebDriver.

Đây là codemẫu Selenium định vị một phần tử theo id của nó. Facebook được sử dụng làm URL cơ sở.

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 tôi đã 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, codenày sẽ có thể xác định chính xác tên thẻ “đầu vào” và sẽ in ra trên cửa sổ Bảng điều khiển của Eclipse.

Tóm tắt để định vị các phần tử

Biến thểMô tảMẫu vật
Bằng cách. Name classtìm các phần tử dựa trên giá trị của thuộc tính “class”findElement (By.className (“someClassName”))
Bằng cách. cssSelectortìm các phần tử dựa trên công cụ Bộ chọn CSS cơ bản của trình điều khiểnfindElement (By.cssSelector (“input # email”))
Bằng cách. idđịnh vị các phần tử bằng giá trị của thuộc tính “id” của chúngfindElement (By.id (“someId”))  
Bằng cách. văn bản liên kếttìm một phần tử liên kết theo văn bản chính xác codenó hiển thịfindElement (By.linkText (“ĐĂNG KÝ”))  
Bằng cách. Nameđịnh vị các phần tử bằng giá trị của thuộc tính “name”findElement (By.name (“someName”))  
Bằng cách. partLinkTextxác định vị trí các phần tử có chứa văn bản liên kết đã chofindElement (By.partialLinkText (“REG”))  
Bằng cách. tagNameđịnh vị các phần tử bằng tên thẻ của chúngfindElement (By.tagName (“div”))  
Bằng cách. xpathđịnh vị 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 sử dụng findElement (By.cssSelector ())

By.cssSelector () không hỗ trợ tính năng contains . Hãy xem xét codeSelenium IDE bên dưới:

Trong Selenium IDE ở trên, toàn bộ bài kiểm tra đã vượt qua. Tuy nhiên, trong tập lệnh Selenium WebDriver bên dưới, thử nghiệm tương tự đã tạo ra lỗi vì WebDriver không hỗ trợ từ khóa contains khi được sử dụng trong phương thức By.cssSelector ().

Các lệnh chung

Tạo phần tử web

Thay vì sử dụng cú pháp dài “driver.findElement (By.locator ())” mỗi khi bạn truy cập vào một phần tử cụ thể, chúng ta có thể khởi tạo một đối tượng WebElement cho nó. class WebElement được chứa trong gói “org.openqa.selenium. *”.

Nhấp vào một phần tử

Nhấp 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 “Đăng nhập” của Mercury Tours.

Những điều sau đây phải đượ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 đợi 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).

Nhận lệnh

Nhận lệnh 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 codebạn phải làm quen.

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

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.

navigate (). to () Cách sử dụng mẫu:  Nó tự động mở một cửa sổ trình duyệt mới và tìm nạp trang codebạn chỉ định bên trong dấu ngoặc đơn của 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 () Cách sử dụng mẫu:  Không cần tham số.Nó làm mới trang hiện tại.
navigate (). back () Cách sử dụng mẫu:  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 () Cách sử dụng mẫu:  Không cần tham sốĐưa bạn chuyển tiếp một trang trên lịch sử của trình duyệt.

Đóng và thoát trình duyệt Windows

close () Cách sử dụng mẫu:  Không cần tham sốNó chỉ đóng cửa sổ trình duyệt codeWebDriver hiện đang kiểm soát .
quit() Cách sử dụng mẫu:  Không cần tham sốNó đóng tất cả các cửa sổ codeWebDriver đã mở.

Để minh họa rõ ràng sự khác biệt giữa close () và thoát (), hãy thử thực thi đoạn codedướ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.

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

Nhưng nếu bạn sử dụng lệnh thoát (), tất cả các cửa sổ sẽ bị đóng – không chỉ cửa sổ chính. Hãy thử chạy đoạn codebên dưới và bạn sẽ nhận thấy rằng hai cửa sổ bật lên ở trên cũng sẽ tự động bị đóng lại.

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

Chuyển đổi giữa các khung hình

Để 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

Trang này có 3 khung có thuộc tính “tên” được chỉ ra ở trên. Chúng tôi muốn truy cập liên kết “Không được chấp nhận” được bao quanh bằng màu vàng ở trên. Để làm được điều đó, trước tiên chúng ta phải hướng dẫn WebDriver chuyển sang khung “classFrame” bằng phương thức “switchTo (). Frame ()” . Chúng ta sẽ sử dụng thuộc tính name của frame làm tham số cho phần “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(); 
	    }
}

Sau khi thực thi codenày, bạn sẽ thấy rằng khung “classFrame” được đưa đến trang “API không được chấp nhận”, có nghĩa là codecủa chúng tôi đã có thể truy cập thành công liên kết “Không được chấp nhận”.

Chuyển đổi giữa các cửa sổ bật lên

WebDriver cho phép các cửa sổ bật lên 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 codenó chứa), chúng ta phải sử dụng phương thức “switchTo (). Alert ()” . Trong đoạn codedướ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 “switchTo (). Alert (). Accept () “ phương pháp.

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

Hãy xem codeví dụ Selenium để thực hiện điều 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à:

Chờ đợi

Có hai loại chờ đợi.

  1. Chờ ngầm – được sử dụng để đặt thời gian chờ mặc định trong suốt chương trình
  2. 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 codehơ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 gói bổ sung để nhập.

Để bắt đầu sử dụng chế độ chờ ngầm, bạn sẽ phải nhập gói này vào codecủa mình.

Tập lệnh trình duyệt web Selenium đầu tiên: Ví dụ về mã JAVA

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

Chờ đợi rõ ràng

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

Bước 1

Nhập hai gói sau:

Bước 2

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

Bước 3

Sử dụng myWaitVar với Điều kiện mong đợi trên các phần codebạn cần chờ đợi rõ ràng. Trong trường hợp này, chúng tôi sẽ chờ đợi rõ ràng trên đầu vào “tên người dùng” (Trang chủ Mercury Tours) trước khi chúng tôi nhập văn bản “hướng dẫn” vào đó.

Điều kiện

Các phương thức sau được sử dụng trong các hoạt động lặp lại và có điều kiện:

  • 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.
  • 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.
  • isSelected () được sử dụng khi bạn muốn xác minh xem một hộp kiểm, nút radio hoặc tùy chọn nhất định trong hộp thả xuống có được chọn hay không. Nó không hoạt động trên các phần tử khác.

Sử dụng điều kiện mong đợi

class Mong đợiConditions cung cấp một tập hợp các điều kiện rộng hơn codebạn có thể sử dụng kết hợp với phương thức Until () của WebDriverWait.

Dưới đây là một số phương pháp Điều kiện mong đợi phổ biến nhất.

  • alertIsPresent () – đợi cho đến khi hộp cảnh báo được hiển thị.
  • elementToBeClickable () – Chờ cho đến khi một phần tử hiển thị và đồng thời được kích hoạt. codeSelenium mẫu bên dưới sẽ đợi cho đến khi phần tử có id = “tên người dùng” 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”.
  • frameToBeAvailableAndSwitchToIt () – Chờ cho đến khi khung đã cho sẵn có rồi tự động chuyển sang khung đó.

Xử lý 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 (“tên người dùng”));

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 sử dụng các lần đợi rõ ràng, loại ngoại lệ codebạn nên bắt là “TimeoutException”.

Tóm lược

  • Để bắt đầu sử dụng API WebDriver, bạn phải nhập ít nhất hai gói này.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Phương thức get () tương đương với lệnh “mở” của Selenium IDE.
  • Định vị các phần tử trong WebDriver được thực hiện bằng cách sử dụng  phương thức findElement () .
  • Sau đây là các tùy chọn có sẵn để định vị các phần tử trong WebDriver:
  • Bằng cách. Name class
  • Bằng cách. cssSelector
  • Bằng cách. id
  • Bằng cách. văn bản liên kết
  • Bằng cách. Name
  • Bằng cách. partLinkText
  • Bằng cách. tagName
  • Bằng cách. xpath
  • By.cssSelector () không hỗ trợ tính năng contains .
  • Bạn có thể khởi tạo một phần tử bằng cách sử dụng class WebElement .
  • Nhấp vào một phần tử được thực hiện bằng cách sử dụng phương thức click () .
  • WebDriver cung cấp các lệnh get hữu ích sau:
  • get()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver cung cấp các lệnh navigate hữu ích này
  • navigate (). forward ()
  • navigate (). back ()
  • hướng đến()
  • navigate (). refresh ()
  • Phương thức close () và thoát () được sử dụng để đóng các cửa sổ trình duyệt. Close () được sử dụng để đóng một cửa sổ duy nhất; trong khi thoát () được sử dụng để đóng tất cả các cửa sổ được liên kết với cửa sổ mẹ codeđối tượng WebDriver đang kiểm soát.
  • Phương thức switchTo (). Frame ()switchTo (). Alert () được sử dụng để hướng tiêu điểm của WebDriver vào khung hoặc cảnh báo tương ứng.
  • Các lượt chờ ngầm được sử dụng để đặt thời gian chờ trong suốt chương trình, trong khi các lượt đợi rõ ràng chỉ được sử dụng trên các phần cụ thể.
  • Bạn có thể sử dụng các phương thức isEnabled (), isDisplayed (), isSelected () và sự kết hợp của các phương thức WebDriverWaitmong đợi khi xác minh trạng thái của một phần tử. Tuy nhiên, họ không xác minh nếu phần tử không tồn tại.
  • Khi isEnabled (), isDisplayed () hoặc isSelected () được gọi trong khi phần tử không tồn tại, WebDriver sẽ ném một NoSuchElementException .
  • Khi các phương thức WebDriverWait và mong đợi được gọi trong khi phần tử không tồn tại, WebDriver sẽ ném ra một TimeoutException

Ghi chú:

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 tôi không thể sử dụng nút chuyển tiếp và lùi, nếu chúng tôi nhấp vào đó, trang sẽ không nhận được lịch biểu

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 để navigate giữa các trang trong quá trình mã hóa Testcase

Blog Tiền Điện Tử

Blog tiền điện tử công thông tin tổng hợp uy tín nhất tất cả các mảng xã hội, giáo dục , công nghệ số. Với khả năng số hóa mạnh mẽ hy vọng sẽ mang lại cho quý bạn đọc những thông tin chính xác nhất 24/24
Back to top button