Gửi nhiều khóa Selenium Python

Chỉ có 2 hành động có thể được thực hiện bằng bàn phím. nhấn xuống một phím và nhả một phím đã nhấn. Ngoài việc hỗ trợ các ký tự ASCII, mỗi phím trên bàn phím đều có một biểu tượng có thể được nhấn hoặc nhả theo trình tự được chỉ định

Ngoài các phím được biểu thị bằng unicode thông thường, các giá trị unicode đã được gán cho các phím bàn phím khác để sử dụng với Selenium. Mỗi ngôn ngữ có cách riêng để tham chiếu các khóa này;

Sử dụng [Phím Java enum](https. //github. com/SeleniumHQ/selenium/blob/selenium-4. 2. 0/java/src/org/openqa/selenium/Keys. java#L28)

Sử dụng [Lớp Python Keys](https. //github. com/SeleniumHQ/selenium/blob/selenium-4. 2. 0/py/selenium/webdriver/common/keys. py#L23)

Sử dụng [. NET tĩnh](https. //github. com/SeleniumHQ/selenium/blob/selenium-4. 2. 0/dotnet/src/webdriver/Keys. cs#L28)

Sử dụng [Hằng số Ruby KEYS](https. //github. com/SeleniumHQ/selenium/blob/selenium-4. 2. 0/rb/lib/selenium/webdriver/common/keys. rb#L28)

Sử dụng [hằng số KHÓA JavaScript](https. //github. com/SeleniumHQ/selenium/blob/selenium-4. 2. 0/javascript/nút/selenium-webdo/lib/đầu vào. js#L44)

Sử dụng [Phím Java enum](https. //github. com/SeleniumHQ/selenium/blob/selenium-4. 2. 0/java/src/org/openqa/selenium/Keys. java#L28)

Đây là một phương pháp tiện lợi trong API hành động kết hợp các lệnh keyDown và keyUp trong một hành động. Việc thực thi lệnh này hơi khác so với việc sử dụng phương thức phần tử, nhưng về cơ bản, lệnh này được sử dụng khi cần nhập nhiều ký tự ở giữa các hành động khác

Đây là một ví dụ về việc sử dụng tất cả các phương pháp trên để thực hiện hành động sao chép/dán. Lưu ý rằng khóa được sử dụng cho thao tác này sẽ khác nhau tùy thuộc vào việc đó có phải là Mac OS hay không. Mã này sẽ kết thúc bằng văn bản. SeleniumSelenium!

Trong bài viết về Actions Class trong Selenium, chúng ta đã thảo luận rằng Selenium cung cấp một tính năng để xử lý các sự kiện bàn phím nơi cử chỉ của người dùng có thể mô phỏng. Ví dụ: giả sử bạn tìm kiếm "Ấn Độ" trên công cụ tìm kiếm google. Đối với điều này, bạn sẽ gõ "Ấn Độ " và nhấn phím Enter, để bạn thấy các truy vấn kết quả. Giả sử, bạn muốn tự động hóa tìm kiếm trên google này bằng cách sử dụng thử nghiệm Selenium, bạn sẽ mô phỏng cách nhấn phím ENTER bằng mã Selenium như thế nào? . Trong hướng dẫn này, chúng tôi sẽ trình bày chi tiết về tất cả các sự kiện Bàn phím được hỗ trợ bởi Selenium. Ngoài ra, chúng ta cũng sẽ xem lớp Actions phù hợp như thế nào với nhu cầu mô phỏng các sự kiện bàn phím trong Selenium

  • Sự kiện bàn phím trong Selenium là gì?
  • Tại sao lớp Hành động cần thiết để thực hiện các hành động Bàn phím bằng Selenium WebDriver?
  • Lớp hành động trong Selenium WebDriver là gì?
  • Các phương pháp khác nhau được cung cấp bởi lớp Hành động cho Sự kiện Bàn phím là gì?
  • Làm cách nào để xử lý các Thao tác bàn phím liền kề bằng Lớp hành động?

Sự kiện bàn phím trong Selenium là gì?

Sự kiện bàn phím mô tả tương tác của người dùng với bàn phím. Khi người dùng nhấn một hoặc nhiều phím, các sự kiện bàn phím sẽ tạo ra. Selenium cung cấp nhiều cách khác nhau để tự động hóa các Sự kiện bàn phím này, một vài trong số đó là

  • Tự động hóa các sự kiện bàn phím bằng phương thức sendKeys() của lớp WebElement
  • Tự động hóa các sự kiện bàn phím bằng lớp Robot
  • Và Tự động hóa các sự kiện bàn phím bằng lớp Hành động

Chúng tôi đã thảo luận về hai cách đầu tiên để xử lý các sự kiện bàn phím bằng cách sử dụng phương thức "sendKeys()" của lớp WebElement của WebDriver và "lớp Robot" trong các bài viết được cung cấp bởi các liên kết tương ứng. Trong bài viết này, chúng tôi sẽ trình bày cụ thể chi tiết về lớp "Actions" trong Selenium WebDriver. Trước khi đi sâu tìm hiểu các khái niệm về lớp "Hành động ", trước tiên chúng ta hãy hiểu tại sao cụ thể là cần có lớp "Hành động " để xử lý các Sự kiện bàn phím đó?

Tại sao lớp Hành động cần thiết để thực hiện các hành động Bàn phím bằng Selenium WebDriver?

Khi chúng ta tương tác với một ứng dụng web, sẽ có nhiều tình huống xảy ra khi người dùng thực hiện các thao tác sau

  • Nhập chữ in hoa/chữ hoa lạc đà. Bất cứ nơi nào người dùng cần nhập một từ hoặc chữ in hoa, họ sẽ nhấn phím "SHIFT" và sẽ nhập các ký tự cần thiết, và bất kỳ ký tự nào sẽ nhập trong khi nhấn phím "SHIFT" sẽ được nhập dưới dạng chữ in hoa
  • Sao chép & Dán văn bản. Khi chúng tôi cần sao chép một số văn bản từ hộp văn bản này sang hộp văn bản khác, chúng tôi chọn văn bản bằng cách nhấn "CTRL+A" họ sao chép văn bản bằng cách sử dụng "CTRL+C" và dán văn bản vào hộp văn bản mới bằng cách nhấp vào văn bản

Đây là những hành động rất phổ biến của người dùng mà chúng tôi thực hiện gần như hàng ngày. Bây giờ, như chúng ta đã thảo luận, Selenium WebDriver cung cấp hai cách để gửi bất kỳ sự kiện bàn phím nào tới phần tử web

  • phương thức sendKeys() của lớp WebElement
  • lớp hành động

Bây giờ chúng ta hãy cố gắng tìm hiểu chi tiết rằng nếu chúng ta muốn tự động hóa kịch bản như đã đề cập ở trên về việc gõ các chữ cái viết hoa (với phím SHIFT được nhấn ), sử dụng phương thức sendKeys() của lớp WebElement

Hãy xem xét kịch bản sau đây để nhanh chóng hiểu được hành vi

  • Đầu tiên, điều hướng đến "https. // demoqa. com/hộp văn bản. "
  • Thứ hai, nhập Họ tên. "Ông. Peter Haynes"
  • Thứ ba, nhập Email. "[email được bảo vệ]"
  • Sau đó, Nhập địa chỉ hiện tại. "43 Ngõ Trường Luân Đôn EC71 9GO"
  • Thứ năm, nhấp vào hộp văn bản Địa chỉ hiện tại và Sao chép Địa chỉ hiện tại
  • Sau đó, dán địa chỉ đã sao chép vào hộp văn bản Địa chỉ thường trú
  • Cuối cùng, xác thực rằng văn bản trong Địa chỉ hiện tại và Địa chỉ thường trú giống nhau

Hãy thử tự động hóa tình huống trên bằng phương thức sendKeys() của lớp WebElement

package automationFramework;

import static org.junit.Assert.assertEquals;

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;

public class KeyboardEvents {

	public static void main(String[] args) {
		
        // Initialize ChromeDriver
	// Here we assume that the ChromeDriver path has been set in the System Global variables
        WebDriver driver=new ChromeDriver();
       
        //Navigate to the demo site
        driver.get("https://demoqa.com/text-box");
       
        // Enter the Full Name
        WebElement fullName = driver.findElement(By.id("userName"));
        fullName.sendKeys("Mr.Peter Haynes");
        
        //Enter the Email
        WebElement email=driver.findElement(By.id("userEmail"));
        email.sendKeys("[email protected]");
        
        // Enter the Current Address
        WebElement currentAddress=driver.findElement(By.id("currentAddress"));
        currentAddress.sendKeys("43 School Lane London EC71 9GO");
        
        // Copy the Current Address
        currentAddress.sendKeys(Keys.CONTROL);
        currentAddress.sendKeys("A");
        currentAddress.sendKeys(Keys.CONTROL);
        currentAddress.sendKeys("C");
        
        //Press the TAB Key to Switch Focus to Permanent Address
        currentAddress.sendKeys(Keys.TAB);
        
        //Paste the Address in the Permanent Address field
        WebElement permanentAddress=driver.findElement(By.id("permanentAddress"));
        permanentAddress.sendKeys(Keys.CONTROL);
        permanentAddress.sendKeys("V");
        
        //Compare Text of current Address and Permanent Address
        assertEquals(currentAddress.getAttribute("value"),permanentAddress.getAttribute("value"));
        
        driver.close();

	}
}

Trong đoạn mã trên, mặc dù phương thức sendKeys() của WebElement cho phép sử dụng Khóa điều khiển, nhưng nó không thể thực hiện hành động sao chép và dán vì không thể kết hợp các chuỗi khóa

Như chúng ta có thể thấy từ ảnh chụp màn hình sau, thay vì dán nội dung của Địa chỉ hiện tại vào trường văn bản Địa chỉ thường trú, nó chỉ dán ký tự "V"

Gửi nhiều khóa Selenium Python

Như rõ ràng từ ảnh chụp màn hình ở trên, văn bản của trường văn bản Địa chỉ hiện tại không sao chép vào trường văn bản Địa chỉ thường trú, do đó dẫn đến việc xác nhận không thành công khi so sánh văn bản của hai trường này xảy ra. Vì vậy, khi chúng tôi thực hiện kiểm tra trên, nó không thành công với thông báo lỗi sau

Gửi nhiều khóa Selenium Python

Vì vậy, đây là nơi phương thức sendKeys() của lớp WebElement bị lỗi. Nói cách khác, nó không thành công khi chúng ta cần kết hợp các phím đặc biệt như "SHIFT", "CONTROL", v.v. với các chuỗi khóa khác nhau, mà tất cả chúng ta đều biết, là một tình huống phổ biến khi chúng ta với tư cách là người dùng đang sử dụng bất kỳ ứng dụng web nào

Do đó, đây là lúc lớp Hành động của Selenium WebDriver xuất hiện, cung cấp nhiều phương thức khác nhau để xử lý cụ thể hoạt động của các phím bàn phím meta này, cần nhấn trong khi thực hiện các thao tác trên các phím bàn phím khác. Hãy xem cách chúng ta có thể xử lý các thao tác bàn phím như vậy, sử dụng lớp Actions của Selenium WebDriver

Lớp hành động trong Selenium WebDriver là gì?

Như chúng ta đã thảo luận ở trên, Selenium WebDriver cung cấp một lớp có tên là "Hành động", lớp này cung cấp nhiều phương thức khác nhau có thể giúp tự động hóa và mô phỏng các hành động của Bàn phím và Chuột. Hình bên dưới hiển thị danh sách đầy đủ các phương pháp được cung cấp bởi Selenium Web Driver và những phương pháp được tô sáng là những phương pháp được sử dụng nhiều nhất để mô phỏng các thao tác của Bàn phím

Gửi nhiều khóa Selenium Python

Hãy hiểu các phương thức cụ thể của Bàn phím được cung cấp bởi Lớp Hành động

Các phương pháp khác nhau được cung cấp bởi lớp Hành động cho Sự kiện Bàn phím là gì?

Như được đánh dấu trong ảnh chụp màn hình ở trên, lớp Hành động chủ yếu cung cấp ba phương thức sau để mô phỏng các sự kiện Bàn phím

  1. sendKeys(). Phương pháp này gửi một loạt các lần nhấn phím đến một phần tử web nhất định. Phương pháp này có hai định dạng quá tải
  • sendKeys(CharSequence. KeysToSend). Ảnh chụp màn hình sau đây hiển thị chi tiết cú pháp của phương thức này

Gửi nhiều khóa Selenium Python

Phương thức này sẽ gửi một chuỗi khóa tới phần tử web hiện đang được đặt tiêu điểm, tôi. e. , nếu chúng tôi muốn gửi các ký tự cụ thể đến một phần tử web, phần tử đó phải được lấy nét trước, sau đó chỉ các ký tự được đề cập mới chuyển đến phần tử web đó

  • sendKeys(phần tử WebElement, CharSequence. KeysToSend). Ảnh chụp màn hình sau đây hiển thị chi tiết cú pháp của phương thức này

Gửi nhiều khóa Selenium Python

Việc triển khai phương thức sendKeys() này sẽ gửi một chuỗi ký tự/khóa tới một phần tử web cụ thể, phần tử này sẽ chuyển thành tham số đầu tiên cho phương thức. Phương pháp này trước tiên tập trung vào phần tử web đích và sau đó thực hiện hành động tương tự như sendKeys(CharSequence keys)

  1. phímDown(). Phương pháp này mô phỏng hành động bàn phím khi cần nhấn một phím bàn phím cụ thể. Vì vậy, bất cứ khi nào bạn cần nhấn một phím và sau đó thực hiện các hành động cụ thể khác, chúng ta có thể sử dụng phương thức keyDown() để giữ phím được nhấn. e. g. , giả sử người dùng phải nhập một số ký tự bằng Capital. Sau đó, để mô phỏng hành vi của người dùng, trong đó người dùng nhấn phím SHIFT rồi nhấn bộ ký tự cần nhập Viết hoa. Phương pháp này cũng có sẵn trong hai biến thể quá tải sau
  • keyDown(phím CharSequence). Ảnh chụp màn hình sau đây hiển thị chi tiết cú pháp của phương pháp này

Gửi nhiều khóa Selenium Python

Phương pháp này nhấn phím được chỉ định trên Phần tử Web hiện được đặt tiêu điểm. Phương pháp này thường nhấn các "Phím bổ trợ" như SHIFT, CTRL, v.v. Nếu bạn muốn nhấn phím bàn phím trên một phần tử web đã chỉ định, thì phần tử web đó trước tiên cần được đặt tiêu điểm một cách rõ ràng, sau đó phương thức này cần được gọi

  • keyDown(phần tử WebElement, khóa CharSequence). Ảnh chụp màn hình sau đây hiển thị chi tiết cú pháp của phương pháp này

Gửi nhiều khóa Selenium Python

Đầu tiên, phương thức này tập trung vào phần tử web, phần tử này đã được truyền dưới dạng tham số cho phương thức và nhấn phím được đề cập trên Phần tử web đó

  1. keyUp(). Chúng tôi sử dụng phương thức này chủ yếu cùng với phương thức keyDown(). Phím bàn phím được nhấn bằng phương thức keyDown(), không được nhả tự động, do đó, phím tương tự cần được giải phóng rõ ràng bằng phương pháp keyUp(). Vì vậy, tương tự như phương thức keyDown(), phương thức này có hai biến thể quá tải
  • keyUp(phím CharSequence). Ảnh chụp màn hình sau đây hiển thị chi tiết cú pháp của phương pháp này

Gửi nhiều khóa Selenium Python

Phương pháp này giải phóng khóa được chỉ định trên Phần tử web hiện được tập trung. Nếu bạn muốn nhả phím bàn phím trên một phần tử web đã chỉ định, thì phần tử web đó trước tiên cần được tập trung một cách rõ ràng, sau đó phương thức này cần được gọi

  • keyUp(phần tử WebElement, khóa CharSequence). Ảnh chụp màn hình sau đây hiển thị chi tiết cú pháp của phương thức này

Gửi nhiều khóa Selenium Python

Phương thức này trước tiên tập trung vào phần tử web, phần tử này được truyền dưới dạng tham số cho phương thức. Sau đó, nó giải phóng khóa được đề cập trên Phần tử web đó

Cuối cùng, chúng tôi rõ ràng về tất cả các phương thức cụ thể của bàn phím được cung cấp bởi lớp Hành động. Sau đó, hãy xem cách chúng ta có thể tự động hóa người dùng như kịch bản đã đề cập ở trên bằng cách sử dụng các phương thức được cung cấp bởi lớp Hành động của Selenium WebDriver

Hãy sửa đổi đoạn mã được viết ở trên để sử dụng các phương thức của lớp Actions, thay vì sử dụng các phương thức của lớp WebElement

package automationFramework;

import static org.junit.Assert.assertEquals;

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 KeyboardEventsUsingActions {

	public static void main(String[] args) {
		
        // Initialize ChromeDriver
		// Here we assume that the ChromeDriver path has been set in the System Global variables
        WebDriver driver=new ChromeDriver();
       
        //Navigate to the demo site
        driver.get("https://demoqa.com/text-box");
        
        //Create object of the Actions class
        Actions actions = new Actions(driver);
       
        
        // Enter the Full Name
        WebElement fullName = driver.findElement(By.id("userName"));
        fullName.sendKeys("Mr.Peter Haynes");
        
        //Enter the Email
        WebElement email=driver.findElement(By.id("userEmail"));
        email.sendKeys("[email protected]");
        
        
        // Enter the Current Address
        WebElement currentAddress=driver.findElement(By.id("currentAddress"));
        
        currentAddress.sendKeys("43 School Lane London EC71 9GO");
        
        
        // Select the Current Address using CTRL + A
        actions.keyDown(Keys.CONTROL);
        actions.sendKeys("a");
        actions.keyUp(Keys.CONTROL);
        actions.build().perform();
        
        // Copy the Current Address using CTRL + C
        actions.keyDown(Keys.CONTROL);
        actions.sendKeys("c");
        actions.keyUp(Keys.CONTROL);
        actions.build().perform();
        
        //Press the TAB Key to Switch Focus to Permanent Address
        actions.sendKeys(Keys.TAB);
        actions.build().perform();
        
        //Paste the Address in the Permanent Address field using CTRL + V
        actions.keyDown(Keys.CONTROL);
        actions.sendKeys("v");
        actions.keyUp(Keys.CONTROL);
        actions.build().perform();
        
        
        //Compare Text of current Address and Permanent Address
        WebElement permanentAddress=driver.findElement(By.id("permanentAddress"));
        assertEquals(currentAddress.getAttribute("value"),permanentAddress.getAttribute("value"));
        
        
        driver.close();

	}

}

Khi chúng tôi chạy đoạn mã trên, chúng tôi nhận được một đầu ra mẫu, như được hiển thị bên dưới

Gửi nhiều khóa Selenium Python

Như chúng ta có thể thấy trong ảnh chụp màn hình ở trên, việc sao chép địa chỉ từ trường "Địa chỉ hiện tại " sang trường "Địa chỉ thường trú" đã thành công. Một vài điểm nữa, mà chúng ta nên tập trung rõ ràng vào đoạn mã trên

  • Bất kỳ phím META nào (Ví dụ: CONTROL trong trường hợp sử dụng ở trên) chúng ta nhấn bằng phương thức keyDown(), nó phải được giải phóng bằng phương thức keyUp(). Nếu không, nó sẽ vẫn được nhấn và có thể gây ra tác dụng phụ trên dòng mã tiếp theo
  • Tất cả các lệnh của lớp "Hành động" thực hiện/ thực hiện các hoạt động của chúng khi chúng ta gọi các phương thức "build()" và "perform()". Vì vậy, mỗi hành động/lệnh dự kiến ​​phải tuân theo các phương thức này
  • Đoạn mã trên sẽ chỉ hoạt động trên nền tảng Windows, như CTRL+C, v.v. , chỉ là hoạt động dành riêng cho Windows. Chúng tôi có thể cập nhật các khóa dành riêng cho nền tảng khi chúng tôi cần chạy cùng một chương trình trên các nền tảng khác

Làm cách nào để xử lý các Thao tác bàn phím liền kề bằng Lớp hành động?

Như đã lưu ý trong các phần trên, tất cả các phương thức của lớp Hành động đã trình bày tóm tắt ở trên chỉ trả về một đối tượng của lớp Hành động. Vì vậy, điều này mang lại cho chúng tôi sự linh hoạt khi sử dụng "Chuỗi phương thức", nơi chúng tôi có thể kết hợp tất cả các lời gọi phương thức cụ thể cho một thao tác chỉ trong một dòng mã

Hãy sửa đổi mã được viết ở trên để cắt bớt nó hơn nữa. Chúng tôi sẽ sử dụng Chuỗi phương thức  và sẽ xử lý nhiều thao tác Bàn phím liền kề khác nhau trong một lần

package automationFramework;

import static org.junit.Assert.assertEquals;

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 KeyboardEventsUsingActions {

	public static void main(String[] args) {
		
        // Initialize ChromeDriver
		// Here we assume that the ChromeDriver path has been set in the System Global variables
        WebDriver driver=new ChromeDriver();
       
        //Navigate to the demo site
        driver.get("https://demoqa.com/text-box");
        
        //Create object of the Actions class
        Actions actions = new Actions(driver);
       
        
        // Enter the Full Name
        WebElement fullName = driver.findElement(By.id("userName"));
        fullName.sendKeys("Mr.Peter Haynes");
        
        //Enter the Email
        WebElement email=driver.findElement(By.id("userEmail"));
        email.sendKeys("[email protected]");
        
        
        // Enter the Current Address
        WebElement currentAddress=driver.findElement(By.id("currentAddress"));
        
        currentAddress.sendKeys("43 School Lane London EC71 9GO");
        
        
        // Select the Current Address
        actions.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).build().perform();
        
        // Copy the Current Address
        actions.keyDown(Keys.CONTROL).sendKeys("c").keyUp(Keys.CONTROL).build().perform();
        
        //Press the TAB Key to Switch Focus to Permanent Address
        actions.sendKeys(Keys.TAB).build().perform();
        
        //Paste the Address in the Permanent Address field
        actions.keyDown(Keys.CONTROL).sendKeys("v").keyUp(Keys.CONTROL).build().perform();
        
        
        //Compare Text of current Address and Permanent Address
        WebElement permanentAddress=driver.findElement(By.id("permanentAddress"));
        assertEquals(currentAddress.getAttribute("value"),permanentAddress.getAttribute("value"));
        
        
        driver.close();

	}

}

Đoạn mã trên sẽ thực hiện chính xác chức năng giống như đã được giới thiệu tóm tắt trong phần trước. Sự khác biệt duy nhất giữa hai là mã này trông nhỏ gọn và dễ đọc hơn. Vì vậy, theo cách này, chúng ta có thể kết hợp nhiều phương thức khác nhau của lớp Actions. Ngoài ra, chúng tôi có thể mô phỏng hành vi của người dùng đối với các thao tác Bàn phím khác nhau

Làm cách nào để nhấn nhiều phím trong Selenium Python?

Xin chào Jasmine, có một số cách để xử lý nhiều phím trên bàn phím trong Selenium Webdriver. .
Sử dụng lớp hành động. Hành động hành động = hành động mới (trình điều khiển); . keyDown(Phím. .
Sử dụng Hợp âm SendKeys. người lái xe. findElement(By. .
Sử dụng lớp Robot. // Tạo lớp Robot Robot rb = new Robot();

Làm cách nào để xử lý nhiều khóa trong Selenium?

Chúng tôi có thể xử lý nhiều phím trên bàn phím trong Selenium webdriver bằng cách sử dụng phương thức Keys. hợp âm . Nhiều phím bàn phím được xử lý được truyền dưới dạng tham số cho phương thức này. Kiểu trả về của Keys.

Làm cách nào để gửi nhiều khóa trong Selenium Java?

IDE Selenium mới . Keys. phương pháp chord() để mô phỏng hành động bàn phím này. Những chiếc chìa khóa. phương thức chord() giúp nhấn nhiều phím cùng lúc.

Làm cách nào để gửi các phím bàn phím trong Selenium?

Hành động mới (trình điều khiển). keyDown(Phím. SỰ THAY ĐỔI). sendKeys("a"). .
ActionChains(trình điều khiển)\. key_down(Phím. SỰ THAY ĐỔI)\. send_keys("a")\. .
Hành động mới (trình điều khiển). KeyDown(Phím. Sự thay đổi). SendKeys("a"). .
người lái xe. hoạt động. key_down(. sự thay đổi). .
đợi tài xế. hành động(). keyDown(Khóa. .
Hành động (trình điều khiển). keyDown(Phím. SỰ THAY ĐỔI)