NỘI DUNG BÀI HỌC

Sử dụng Actions class để xử lý các thao tác của người dùng với chuột và bàn phím

Actions Class in Selenium

Actions class là một thư viện được cung cấp bởi Selenium để xử lý các sự kiện bàn phím và chuột. Trong Selenium WebDriver, việc xử lý các sự kiện này bao gồm các thao tác như kéo và thả, nhấp vào nhiều phần tử bằng phím điều khiển, trong số các thao tác khác. Các hoạt động này được thực hiện bằng API tương tác người dùng nâng cao. Nó chủ yếu bao gồm các Hành động cần thiết khi thực hiện các hoạt động này.

Bước 1: Đầu tiên, để dùng được thư viện Actions class chúng ta import thư viện vào:

import org.openqa.selenium.interactions.Actions

Bước 2: Để sử dụng các phương thức được cung cấp bởi lớp Actions, chúng ta cần tạo một đối tượng của lớp này và chuyển WebDriver làm đối số:

// instantiate the WebDriver
WebDriver driver = new ChromeDriver();
 
// create an object of the Actions class
Actions action = new Actions(driver);

Bước 3: Đối tượng được tạo bây giờ có thể được sử dụng để thực hiện bất kỳ hành động nào. Bạn có thể thấy các hành động khác nhau được cung cấp bởi lớp này sau khi bạn tạo một đối tượng.

[Selenium Java] Lesson 12: Xử lý User Interactions dùng Actions class Robot class | Anh Tester

Các Phương thức của lớp hành động

Lớp hành động hữu ích chủ yếu cho các hành động chuột và bàn phím. Để thực hiện các hành động như vậy, Selenium cung cấp nhiều phương thức khác nhau.

 Các thao tác chuột trong Selenium:

  1. doubleClick () : Thực hiện nhấp đúp vào phần tử
  2. clickAndHold () : Thực hiện nhấp lâu vào chuột mà không nhả nó
  3. dragAndDrop () : Kéo phần tử từ một điểm và thả xuống một điểm khác
  4. moveToElement () : Di chuyển con trỏ chuột đến giữa phần tử
  5. moToElementBy() : Một phương thức thực hiện nhấp và giữ tại vị trí của phần tử nguồn, di chuyển theo một độ lệch đã cho, sau đó nhả chuột.
  6. moveByOffset(): Di chuyển chuột từ vị trí hiện tại của nó (hoặc 0,0) theo độ lệch đã cho.
  7. release() : Thả nút chuột trái ở vị trí chuột hiện tại
  8. contextClick () : Thực hiện nhấp chuột phải vào chuột

Thao tác bàn phím trong Selenium:

  1. sendKeys () : Gửi một loạt khóa đến phần tử
  2. keyUp () : Thực hiện phát hành khóa
  3. keyDown () : Thực hiện nhấn phím mà không cần nhả
  4. Các lệnh bàn phím khác...(ENTER, SHIFT, CTRL, TAB,...)
Lệnh xác nhận các thao tác trên:
  • build() trong lớp Actions được sử dụng để tạo chuỗi hành động hoặc thao tác mà bạn muốn thực hiện.
  • perform()Phương thức này trong Lớp Hành động được sử dụng để thực hiện chuỗi hành động được xây dựng bằng cách sử dụng Phương pháp xây dựng Hành động.
  • build().perform() = tạo chuỗi hành động + thực thi

Bây giờ, chúng ta hãy tìm hiểu cách thực hiện các thao tác chuột và bàn phím khác nhau.

1. sendKeys + click + Keys class (using Keyboard)

Sử dụng lớp Actions trong Selenium, chúng ta có thể triển khai phương thức sendKeys () để nhập các giá trị cụ thể trong ứng dụng.

package AnhTester.ActionsClass;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class sendKeys {

	public static void main(String[] args) throws InterruptedException {

		// specify the driver location
		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");

		// instantiate the driver
		WebDriver driver = new ChromeDriver();

		// maximise the window
		driver.manage().window().maximize();

		// specify the URL of the webpage
		driver.get("https://www.google.com/");

		// specify the locator of the search box
		WebElement element = driver.findElement(
				By.xpath("/html[1]/body[1]/div[1]/div[3]/form[1]/div[1]/div[1]/div[1]/div[1]/div[2]/input[1]"));

		// create an object for the Actions class and pass the driver argument
		Actions action = new Actions(driver);

		// pass the product name that has to be searched in the website
		action.sendKeys(element, "Anh Tester").build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}

Trong phần này, chúng ta sẽ xem cách chúng ta có thể sử dụng lớp Hành động trong Selenium để gửi các Khóa khác như CTRL, ALT, SHIFT, v.v.

Khi chúng ta đang tìm kiếm một từ khóa trên trang web Google, chúng tôi sẽ nhập 'Anh Tester' và nhấn Enter từ bàn phím. Hành động này sẽ giống như hành động được thực hiện bằng cách nhấp vào nút Tìm kiếm.

package AnhTester.ActionsClass;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class keyboard_Keys {

	public static void main(String[] args) throws InterruptedException {

		// specify the driver location
		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");

		// instantiate the driver
		WebDriver driver = new ChromeDriver();

		// maximise the window
		driver.manage().window().maximize();

		// specify the URL of the webpage
		driver.get("https://www.google.com/");

		// specify the locator of the search box
		WebElement element = driver.findElement(
				By.xpath("/html[1]/body[1]/div[1]/div[3]/form[1]/div[1]/div[1]/div[1]/div[1]/div[2]/input[1]"));

		// create an object for the Actions class and pass the driver argument
		Actions action = new Actions(driver);

		// pass the product name that has to be searched in the website
		action.sendKeys(element, "Anh Tester").build().perform();

		action.sendKeys(Keys.ENTER).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}

và cuối cùng là thêm lệnh click() vào thôi:

package AnhTester.ActionsClass;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class click {

	public static void main(String[] args) throws InterruptedException {

		// specify the driver location
		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");

		// instantiate the driver
		WebDriver driver = new ChromeDriver();

		// maximise the window
		driver.manage().window().maximize();

		// specify the URL of the webpage
		driver.get("https://www.google.com/");

		// specify the locator of the search box
		WebElement element = driver.findElement(
				By.xpath("/html[1]/body[1]/div[1]/div[3]/form[1]/div[1]/div[1]/div[1]/div[1]/div[2]/input[1]"));

		// create an object for the Actions class and pass the driver argument
		Actions action = new Actions(driver);

		// pass the product name that has to be searched in the website
		action.sendKeys(element, "Anh Tester").build().perform();

		action.sendKeys(Keys.ENTER).build().perform();

		// Get element title of page
		WebElement elementTitlePage = driver
				.findElement(By.xpath("//h3[normalize-space()='Anh Tester - Automation Testing']"));

		// perform a mouse click on the search button
		action.click(elementTitlePage).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}


2. contextClick và doubleClick

Hàm contextClick() để click chuột phải
Hàm doubleClick() y như cái tên nó, click nhanh 2 lần vào phần tử nào đó

Đầu tiên double click vào Title page

package AnhTester.ActionsClass;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class contextClick_doubleClick {

	public static void main(String[] args) throws InterruptedException {

		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().window().maximize();
		driver.get("https://anhtester.com/");

		WebElement element = driver.findElement(
				By.xpath("//div[@class='col-lg-7']//h2[@class='section__title'][contains(text(),'Anh Tester')]"));

		Actions action = new Actions(driver);
		
		action.doubleClick(element).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}

Tới click chuột phải nào

package AnhTester.ActionsClass;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class contextClick_doubleClick {

	public static void main(String[] args) throws InterruptedException {

		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().window().maximize();
		driver.get("https://anhtester.com/");

		WebElement element = driver.findElement(
				By.xpath("//div[@class='col-lg-7']//h2[@class='section__title'][contains(text(),'Anh Tester')]"));

		Actions action = new Actions(driver);
		
		//Double click to element
		action.doubleClick(element).build().perform();
		
		Thread.sleep(1000);
		
		//Right click to element
		action.contextClick(element).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}


3. moveToElement

Di chuyển đến phần tử nào đó

package AnhTester.ActionsClass;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class moveToElement {

	public static void main(String[] args) throws InterruptedException {

		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().window().maximize();
		driver.get("https://anhtester.com/");

		WebElement element = driver.findElement(
				By.xpath("//h2[contains(text(),'Kiến thức Automation Testing')]"));

		Actions action = new Actions(driver);
		
		//Move to element (di chuyển tới title Kiến thức Automation Testing)
		action.moveToElement(element).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}


4. dragAndDrop

Phương thức dragAndDrop (nguồn WebElement, mục tiêu WebElement) được sử dụng để kéo một phần tử từ nguồn và thả nó vào vị trí đích.

[Selenium Java] Lesson 12: Xử lý User Interactions dùng Actions class Robot class | Anh Tester
Có hai cách để thực hiện việc này với sự trợ giúp của lớp Hành động trong Selenium

  1. Sử dụng phương thức dragAndDrop (nguồn WebElement, mục tiêu WebElement).
  2. Sử dụng loạt hành động thủ công: clickAndHold (nguồn WebElement)? moveToElement (mục tiêu WebElement)? release()

Đây là cách chúng tôi kéo và thả tệp hoặc hình ảnh từ nguồn đến đích theo cách thủ công

package AnhTester.ActionsClass;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class dragAndDrop {
	public static void main(String[] args) throws InterruptedException {

		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
		driver.manage().window().maximize();
		driver.get("http://demo.guru99.com/test/drag_drop.html");

		// Element which needs to drag.
		WebElement From = driver.findElement(By.xpath("//*[@id='credit2']/a"));
		// Element on which need to drop.
		WebElement To = driver.findElement(By.xpath("//*[@id='bank']/li"));

		Actions action = new Actions(driver);
		Thread.sleep(1000);
		// Dragged and dropped.
		action.dragAndDrop(From, To).build().perform();
		
		Thread.sleep(1000);
		// Drag and Drop by Pixel.
		WebElement from_5000 = driver.findElement(By.xpath("//*[@id='fourth']/a"));
		action.dragAndDropBy(from_5000, 168, 40).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}


5. KeyUp và KeyDown

Phương thức keyUpkeyDown được sử dụng để bắt chước các thao tác nhấn và thả phím trên bàn phím. Các phương thức này phục vụ nhiều phương thức như chuyển đổi văn bản thành chữ hoa hoặc chữ thường, sao chép văn bản từ nguồn và dán vào vị trí đích, cuộn lên và xuống trang web, lựa chọn nhiều giá trị, v.v.

a. Chuyển văn bản sang chữ hoa

Khi muốn nhập văn bản theo cách thủ công, chúng ta nhấn phím SHIFT xuống và nhập văn bản đồng thời mà không cần nhả phím SHIFT. Chúng ta có thể áp dụng logic tương tự cho mã của mình như dưới đây

package AnhTester.ActionsClass;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.Test;

public class KeyUp_KeyDown {

	@Test
	public void InputTextUppercase() throws InterruptedException {
		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
		driver.manage().window().maximize();
		driver.get("https://www.google.com/");

		WebElement element = driver.findElement(
				By.xpath("/html[1]/body[1]/div[1]/div[3]/form[1]/div[1]/div[1]/div[1]/div[1]/div[2]/input[1]"));

		Actions action = new Actions(driver);

		// Đè giữ phím SHIFT và nhập text -> Chữ in hoa
		action.keyDown(element, Keys.SHIFT).sendKeys("anh tester").build().perform();

		Thread.sleep(2000);
		driver.quit();
	}
}

b. Cuộn lên và xuống trang

Bạn cũng có thể cuộn lên đầu hoặc cuối trang bằng thao tác đè CONTROL + HOME hoặc CONTROL + END
Chúng ta chuyển qua cách viết TestNG nhé =))

	@Test
	public void ScrollPage() throws InterruptedException {
		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
		driver.manage().window().maximize();
		driver.get("https://anhtester.com/");

		Actions action = new Actions(driver);
		
		Thread.sleep(1000);
		// Scroll down
		action.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();
		Thread.sleep(2000);
		// Scroll up
		action.keyDown(Keys.CONTROL).sendKeys(Keys.HOME).perform();

		Thread.sleep(2000);
		driver.quit();
	}

c. Copy & Paste

@Test
	public void CopyAndPaste() throws InterruptedException {
		System.setProperty("webdriver.chrome.driver", "resources/chromedriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
		driver.manage().window().maximize();
		driver.get("https://anhtester.com/blogs");
		
		WebElement inputCourseElement = driver.findElement(By.xpath("//input[@placeholder='Search for courses . . .']"));
		WebElement inputBlogElement = driver.findElement(By.xpath("//input[@placeholder='Search blogs here...']"));
		
		Actions action = new Actions(driver);
		
		Thread.sleep(1000);
		// Nhập text vào ô search course
		inputCourseElement.sendKeys("testing");
		Thread.sleep(1000);
		//Ctrl + a để bôi đen
		action.keyDown( Keys.CONTROL ).sendKeys( "a" ).keyUp( Keys.CONTROL ).build().perform();
		Thread.sleep(1000);
		//Ctrl + c để copy
		action.keyDown( Keys.CONTROL ).sendKeys( "c" ).keyUp( Keys.CONTROL ).build().perform();
		Thread.sleep(1000);
		//click vào ô Blog search
		inputBlogElement.click();
		Thread.sleep(1000);
		//Ctrl + v để dán
		action.keyDown( Keys.CONTROL ).sendKeys( "v" ).keyUp( Keys.CONTROL ).build().perform();

		Thread.sleep(2000);
		driver.quit();
	}

d. Làm mới trang

Dễ mà, nhấn Ctrl + F5 =))

action.keyDown(Keys.CONTROL).sendKeys(Keys.F5).build().perform();


==> Kết thúc Actions Class !!!

Teacher

Teacher

Anh Tester

Software Tester

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:


🌱 Zalo
Automation Testing:   https://zalo.me/g/lsxswc560
🌱 Facebook Group: Cộng đồng Automation Testing Việt Nam (Website, Desktop, Mobile)
🌱 Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học