NỘI DUNG BÀI HỌC
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:
using OpenQA.Selenium.Interactions;
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ố:
// Khởi tạo đối tượng driver
IWebDriver driver = new ChromeDriver();
// Khởi tạo đối tượng thuộc 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.
Các Phương thức của lớp hành động Actions
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:
- DoubleClick() : Thực hiện nhấp đúp vào phần tử
- ClickAndHold() : Thực hiện nhấp lâu vào chuột mà không nhả nó
- DragAndDrop() : Kéo phần tử từ một điểm và thả xuống một điểm khác
- MoveToElement() : Di chuyển con trỏ chuột đến giữa phần tử
- 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.
- MoveByOffset(): Di chuyển chuột từ vị trí hiện tại của nó (hoặc 0,0) theo độ lệch đã cho.
- Release() : Thả nút chuột trái ở vị trí chuột hiện tại
- ContextClick() : Thực hiện nhấp chuột phải vào chuột
Thao tác bàn phím trong Selenium:
- SendKeys() : Gửi một loạt khóa đến phần tử
- KeyUp() : Thực hiện nhả phím lên (đè-nhả)
- KeyDown() : Thực hiện nhấn phím mà không cần nhả (đè)
- Các lệnh bàn phím khác...(ENTER, SHIFT, CTRL, TAB,...) kết hợp class Keys
Lệnh xác nhận các thao tác trên:
build()
phương thức này 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 hàm build().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.
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.
using NUnit.Framework;
using OpenQA.Selenium.Interactions;
using SeleniumCSharp.Initialize;
using SeleniumCSharp;
using OpenQA.Selenium;
using System.Threading;
namespace SeleniumCSharp.Bai11_ActionsClass
{
[TestFixture]
class ActionsClass : Init_Program
{
[Test]
public void ClickSendKeys()
{
driver.Navigate().GoToUrl("https://www.google.com/");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
// Thực hiện điền text vào ô search
IWebElement inputSearch = driver.FindElement(By.Name("q"));
inputSearch.SendKeys("Anh Tester");
Thread.Sleep(1000);
//Thực hiện Enter để tìm kiếm
action.SendKeys(Keys.Enter).Perform();
Thread.Sleep(1000);
//Thực hiện click vào link Text Selenium Java
IWebElement linkText = driver.FindElement(By.XPath("//a[normalize-space()='Selenium Java']"));
action.Click(linkText).Build().Perform();
Thread.Sleep(2000);
}
}
}
2. ContextClick và DoubleClick
Hàm ContextClick() để click chuột phải
Hàm DoubleClick() để click nhanh 2 lần vào phần tử nào đó
Đầu tiên double click vào Title page
[Test]
public void ContextAndDoubleClick() {
driver.Navigate().GoToUrl("https://anhtester.com/");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
// Thực hiện Double click và title
IWebElement titleAnhTester = driver.FindElement(By.XPath("//div[@class='col-lg-7']//div[@class='section-heading']//h2"));
action.DoubleClick(titleAnhTester).Build().Perform();
Thread.Sleep(2000);
// Thực hiện Right click vào Website module
IWebElement websiteModule = driver.FindElement(By.XPath("//h3[normalize-space()='Website Testing']"));
action.ContextClick(websiteModule).Build().Perform();
Thread.Sleep(1000);
}
3. MoveToElement
Di chuyển đến phần tử nào đó
[Test]
public void MoveToElement() {
driver.Navigate().GoToUrl("https://anhtester.com/");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
Thread.Sleep(1000);
// Thực hiện Double click và title
IWebElement courseMenu = driver.FindElement(By.Id("categories"));
action.MoveToElement(courseMenu).Build().Perform();
Thread.Sleep(2000);
}
4. DragAndDrop
Phương thức DragAndDrop(from IWebElement, to IWebElement) được sử dụng để kéo một phần tử từ nguồn và thả nó vào vị trí đích.
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
- Sử dụng phương thức DragAndDrop
- Sử dụng loạt hành động thủ công: ClickAndHold -> MoveToElement -> Release
Đây là cách chúng ta kéo và thả tệp hoặc hình ảnh từ nguồn đến đích theo cách thủ công
[Test]
public void DragAndDrop() {
driver.Navigate().GoToUrl("http://demo.guru99.com/test/drag_drop.html");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
Thread.Sleep(1000);
// Element which needs to drag.
IWebElement From = driver.FindElement(By.XPath("//*[@id='credit2']/a"));
// Element on which need to drop.
IWebElement To = driver.FindElement(By.XPath("//*[@id='bank']/li"));
Thread.Sleep(1000);
// Kéo button Bank xuống dưới
action.DragAndDrop(From, To).Build().Perform();
Thread.Sleep(1000);
}
5. KeyUp và KeyDown
Phương thức keyUp và keyDown đượ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
[Test]
public void KeyUp_KeyDown() {
driver.Navigate().GoToUrl("https://www.google.com/");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
// Thực hiện điền text vào ô search
IWebElement inputSearch = driver.FindElement(By.Name("q"));
inputSearch.SendKeys("anh ");
Thread.Sleep(1000);
//Thực hiện đè Shift và nhập Text
action.KeyDown(Keys.Shift).SendKeys("tester ").Build();
Thread.Sleep(1000);
//Thực hiện nhả Shift ra và điền text
action.KeyDown(Keys.Shift).SendKeys("automation ").KeyUp(Keys.Shift).SendKeys("testing").Build().Perform();
Thread.Sleep(2000);
}
b. Cuộn trang lên và xuống
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
[Test]
public void ScrollPage() {
driver.Navigate().GoToUrl("https://anhtester.com/");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
Thread.Sleep(1000);
//Thực hiện nhấn tổ hợp Ctrl + Home
action.KeyDown(Keys.Control).SendKeys(Keys.End).Build().Perform();
Thread.Sleep(2000);
//Thực hiện nhấn tổ hợp Ctrl + End
action.KeyDown(Keys.Control).SendKeys(Keys.Home).Build().Perform();
Thread.Sleep(2000);
}
c. Copy & Paste
[Test]
public void CopyPaste() {
driver.Navigate().GoToUrl("https://anhtester.com/");
//Tạo đối tượng của Actions class
Actions action = new Actions(driver);
Thread.Sleep(1000);
IWebElement inputSearchCourse = driver.FindElement(By.Name("key"));
inputSearchCourse.SendKeys("testing");
//Thực hiện nhấn tổ hợp Ctrl + A
action.KeyDown(Keys.Control).SendKeys("a").KeyUp(Keys.Control).Build().Perform();
//Thực hiện nhấn tổ hợp Ctrl + C
action.KeyDown(Keys.Control).SendKeys("c").KeyUp(Keys.Control).Build().Perform();
Thread.Sleep(1000);
//Click vào menu Blog
IWebElement menuBlog = driver.FindElement(By.XPath("//a[normalize-space()='blog']"));
menuBlog.Click();
Thread.Sleep(1000);
//Click ô tìm kiếm Blog
IWebElement inputSearchBlog = driver.FindElement(By.XPath("//input[@placeholder='Tìm kiếm bài viết . . .']"));
inputSearchBlog.Click();
Thread.Sleep(2000);
//Thực hiện nhấn tổ hợp Ctrl + V
action.KeyDown(Keys.Control).SendKeys("v").KeyUp(Keys.Control).Build().Perform();
Thread.Sleep(1000);
}
d. Làm mới trang với F5
Dễ mà, nhấn Ctrl + F5 :))
action.KeyDown(Keys.Control).SendKeys(Keys.F5).Build().Perform();