SF

""

Double-click với Selenium

Double-click với Selenium



 Thao tác này bây giờ bạn sẽ không gặp nhiều trên các ứng dụng web mấy, thường thì ít khi bạn cần phải thực hiện nhấp đúp chuột. Và biết là thế, nhưng nếu trong một trường hợp nào đó mà bạn muốn hoặc đơn giản là thích làm thế thôi, thì đọc tiếp bài viết này để xem Selenium làm thế nào để giúp bạn xử lý thao tác này nhé!

Cách 1. Sử dụng class Action trong Selenium Webdriver

Trong class Action, bạn có thể tìm trong đó method doubleClick(, method này sẽ giúp bạn giải quyết vấn đề: 

//Lấy ra vị trí của phần tử sẽ thực hiện double-click
WebElement element = driver.findElement(By.id(“message”));

//Khởi tạo đối tượng action
Actions action = new Actions(driver);

//Thực hiện double-click lên phần tử đó
action.doubleClick(element).build().perform();

Cách 2. Sử dụng Javascript Executor

Ngoài cách trên là sử dụng Action class, mình có mần được một cách khác để thực hiện thao tác này bằng cách sử dụng Javascript Executor, bạn chỉ cần sử dụng dòng code sau:

//Lấy ra vị trí của phần tử sẽ thực hiện

double-click WebElement element = driver.findElement(By.id(“message”));

//Thực hiện double click tại phần tử đã lấy bên trên

(JavascriptExecutor) webDriver).executeScript(“var evt = document.createEvent(‘MouseEvents’);”+ “evt.initMouseEvent(‘dblclick’,true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);”+“arguments[0].dispatchEvent(evt);”, element);

Giải thích qua một chút dòng code javascript dài ngoẵng kia chút, ban đầu ở bài tham khảo kia câu javascript nó ngắn gọn lắm, trông rất là đơn giản, nhưng mà mang vào code chạy thử thì nó không chạy đúng được như ý muốn, làm bổn cô nương đây giật cả mình, vội vã đi tìm hiểu cuối cùng thì tìm ra được đoạn kia. Về cơ bản thì nó là cấu trúc câu lệnh để thực hiện action là double click thôi, và ở đây là mình thực hiện script này tại phần tử có tên là element mà mình đã lấy ra locator của nó ở ngay phía trên đấy.

package test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.JavascriptExecutor;

public class DoubleClick {
 public static void main(String[] args) throws InterruptedException {
 
 System.setProperty("webdriver.ie.driver","D:\\AnhTo\\Setup\\selenium\\IEDriverServer.exe");
 DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
 caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
 caps.setCapability("nativeEvents", false);
 WebDriver driver = new InternetExplorerDriver(caps);
 
 driver.get("http://artoftesting.com/sampleSiteForSelenium.html");
 
 WebElement btn = driver.findElement(By.id("dblClkBtn"));
 /*
 * Thực hiện double click với class Action
 * 
 Actions action = new Actions(driver);
 action.doubleClick(btn).build().perform();
 */
 
 // Thực hiện double-click với Javascript Executor
 
 ((JavascriptExecutor) driver).executeScript("var evt = document.createEvent('MouseEvents');"+ 
 "evt.initMouseEvent('dblclick',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);"+ 
 "arguments[0].dispatchEvent(evt);", btn);
 
 Thread.sleep(3000);
 driver.quit();
 
 }
}