So sánh các loại wait trong selenium năm 2024

Selenium là một trong những công cụ kiểm tra tự động hóa được sử dụng rộng rãi trên thị trường hiện nay, được sử dụng để kiểm tra các ứng dụng web. Selenium lần đầu tiên có mặt trên thị trường vào năm 2004 dưới dạng Selenium Core. Sau đó nó có một số phiên bản mở rộng cho nhiều loại như Selenium IDE, Selenium Webdriver, Selenium Grid và Selenium RC.

Cái mà Anh Tester muốn giới thiệu đến các bạn là Selenium WebDriver. Bản này nó cho phép chúngg ta viết code phát triển cùng với nhiều loại ngôn ngữ lập trình để chạy auto test cho website.

2. Sự thay đổi trong Selenium 4

🔆 Giao thức W3C WebDriver

Theo Simon Stewart, Trưởng dự án của Selenium, giao thức W3C WebDriver là lý do để nâng cấp lên Selenium 4. Nó khác với giao thức JSON Wire ban đầu. Một trong những lợi thế liên quan đến thử nghiệm của chúng ta chạy nhất quán giữa các trình duyệt. Việc chuẩn hóa W3C tăng cường khả năng tương thích trên các triển khai API WebDriver phần mềm khác nhau.

W3C viết tắt của cụm từ World Wide Web Consutirum, W3C là chuẩn được các nhà thiết kế website sử dụng làm thước đo khi thiết kế các website. Chủ tịch của tổ chức đưa ra chuẩn này cũng là người đã sáng tạo ra giao thức HTTP và ngôn ngữ đánh dấu siêu văn bản HTML mà chúng ta sử dụng hiện nay.

Cho thấy ngày nay chuẩn W3C sẽ là chuẩn hiện đại chung, còn JSON Wire là chuẩn cũ nên Selenium đã tiến hành cải tiến để sau này dễ thích ứng và phát triển phù hợp cho nhiều nền tảng.

✅ Kiến trúc của Selenium 3:

So sánh các loại wait trong selenium năm 2024

✅ Kiến trúc của Selenium 4:

So sánh các loại wait trong selenium năm 2024

Sau khi Giao thức W3C được thay thế cho giao thức JSON Wire, bạn không cần mã hóa và giải mã các yêu cầu. Giao tiếp trực tiếp này mang lại sự ổn định và nhất quán hơn.

3. Tải Selenium 4 hoặc nâng cấp

4. Tính năng mới trong Selenium 4

Các tính năng xoá bỏ từ bản Selenium 3:

  1. Phương thức tìm phần tử: Các phương thức tiện ích để tìm (các) phần tử trong giao diện

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

3 đã bị xóa vì chúng chỉ được sử dụng trong nội bộ. Thay vì điều này, lớp

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

4 được chú thích để tăng tính ổn định.

Old:

driver.findElementByClassName("className");

New:

driver.findElement(By.className("className"));

  1. Desired Capabilities

Old:

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

New:

FirefoxOptions browserOptions = new FirefoxOptions();  
browserOptions.setPlatformName("Windows 10");  
browserOptions.setBrowserVersion("104");  
Map cloudOptions = new HashMap<>();  
cloudOptions.put("build", myTestBuild);  
cloudOptions.put("name", myTestName);  
browserOptions.setCapability("cloud:options", cloudOptions);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);  

  1. Actions class

Old:

moveToElement(WebElement).click()  
moveToElement(WebElement).clickAndHold()  
moveToElement(WebElement).contextClick()  
moveToElement(WebElement).doubleClick()

New:

click(WebElement);  
clickAndHold(WebElement);  
contextClick(WebElement);  
doubleClick(WebElement);
DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

5: phương thức này (người dùng thả nút chuột đã nhấn) ban đầu là một phần của lớp

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

6Bây giờ với phiên bản cập nhật của Selenium 4 thì nó đã được chuyển sang lớp

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

7.

  1. Timeout Parameters: thay đổi kiểu đơn vị thời gian trong các hàm Wait của Selenium

Old:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
 WebDriverWait wait = new WebDriverWait(driver,10);
Wait wait = new FluentWait(driver)  
  .withTimeout(30, TimeUnit.SECONDS)  
  .pollingEvery(5, TimeUnit.SECONDS)  
  .ignoring(NoSuchElementException.class);

New:

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  
driver.manage().timeouts().scriptTimeout(Duration.ofMinutes(2));  
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(10));
driver.findElement(By.className("className"));

0

driver.findElement(By.className("className"));

1

  1. Browser Interface: Xoá bỏ hỗ trợ cho trình duyệt Opera và PhantomJS

Hiện tại chỉ còn hỗ trợ như sau:

  • Firefox – FirefoxOptions
  • Chrome – ChromeOptions
  • Internet Explorer (IE) – InternetExplorerOptions
  • Microsoft Edge – EdgeOptions
  • Safari – SafariOptions

Mà thằng IE cũng bị Microsoft khai tử luôn rồi nên có cũng như không hehe

Xem thêm Changes Log này: https://www.selenium.dev/selenium/docs/api/javascript/page/Changes.html

🔆 Các tính năng mới bổ sung trong Selenium 4

Anh Tester mới cập nhật tại phiên bản mới nhất hiện tại là v4.6.0 (updated 05/11/2022).

1)

Chụp ảnh màn hình của phần tử web cụ thể: Trước đó trong Selenium 3 người dùng có thể chụp ảnh màn hình của toàn trang nhưng Selenium 4 đi kèm với một tính năng mới cho phép người dùng có thể chụp ảnh màn hình của một phần tử web cụ thể.

driver.findElement(By.className("className"));

2

  1. Mở tab mới trong trình duyệt: Trong Selenium 4 chúng ta có thể mở một tab mới trong trình duyệt cùng với tab hiện có với hàm hỗ trợ sẵn.

Chú ý: import class WindowType vào nhé !!

driver.findElement(By.className("className"));

3

  1. Mở cửa sổ mới trong trình duyệt: Trong Selenium 4 chúng ta có thể mở một cửa sổ mới trong chính trình duyệt hiện tại.

driver.findElement(By.className("className"));

4

  1. Vị trí đối tượng: bây giờ sử dụng Selenium 4 người dùng có thể lấy được vị trí chính xác của các phần tử web như tọa độ, kích thước, chiều cao, chiều rộng, v.v. làm vị trí của đối tượng.

driver.findElement(By.className("className"));

5

  1. Bộ định vị tương đối: Bộ định vị tương đối với chức năng mới được thêm vào để tìm ra phần tử trên một trang gần phần tử kia, hay nói cách khác là chúng ta có thể tìm một Web Element trên một trang web một cách tương đối.
  • below(): để tìm phần tử bên dưới một phần tử web chỉ định.
  • toLeftOf(): nó tìm phần tử web phía bên trái của phần tử web chỉ định.
  • toRightOf(): nó tìm phần tử web phía bên phải phần tử web chỉ định.
  • above(): nó tìm phần tử nằm bên trên phần tử được chỉ định.
  • near(): nó tìm một phần tử cách xa (khoảng 50 pixel) từ một phần tử web được chỉ định.

driver.findElement(By.className("className"));

6

  1. Công cụ Chrome DevTools: Trong Selenium 4 họ đã thực hiện một số thay đổi nội bộ trên API. Trong Selenium 3 thì trình điều khiển chrome mở rộng trực tiếp đến lớp trình điều khiển từ xa nhưng Selenium 4 có những thay đổi nhất định về điều này, trong Selenium 4 lớp trình điều khiển chrome mở rộng đến Trình điều khiển Chromium Driver. Lớp trình điều khiển Chromium Driver trong Selenium 4 bao gồm các phương thức khác nhau được xác định trước để truy cập công cụ phát triển.

Bằng cách sử dụng API, chúng ta có thể thực hiện thao tác dưới đây:

  • Enables network offline (Nó cho phép bật mạng ngoại tuyến)
  • Enable Network Online (Bật mạng trực tuyến)
  • Get console log
  • Network Interception: chặn, xác thực và sửa đổi các yêu cầu và phản hồi của mạng. Thêm tiêu đề bổ sung, yêu cầu không thành công, sửa đổi nội dung yêu cầu / phản hồi, v.v.

Ví dụ dùng DevTool để xử lý Authentication:

driver.findElement(By.className("className"));

7

  1. Auto download Binary của Browser tương ứng: chúng ta không cần chỉ định đường dẫn file binary của Browser. Selenium có tính năng Selenium Manager nó tự quản lý và tự động tải về binary mới nhất.

Cũ: phải cần chỉ định đường dẫn Binary hoặc dùng WebDriverManager:

driver.findElement(By.className("className"));

8

driver.findElement(By.className("className"));

9

Mới: Selenium Manager tự tải về nếu không tìm thấy đường dẫn chỉ định Binary

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

0

🔆 Toàn bộ mã nguồn code mẫu cho Selenium 4 bên trên

✅ Thư viện Maven trong pom.xml

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

1

✅ Mã code với Selenium 4 và TestNG:

DesiredCapabilities caps = DesiredCapabilities.firefox();  
caps.setCapability("platform", "Windows 10");  
caps.setCapability("version", "104");  
caps.setCapability("build", myTestBuild);  
caps.setCapability("name", myTestName);  
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);  

2

♻️ Source code Selenium Java TestNG: https://github.com/anhtester/NewFeatureSelenium4

Yeah Anh Tester đã soạn lại các thay đổi mới của Selenium 4 với phiên bản hiện tại là v4.6.0 hy vọng cung cấp các thông tin mới mẽ bổ ích cho các bạn. Chắc chắn còn thiếu nhiều vì An soạn những cái cần cơ bản thường gặp thôi.

An sẽ cập nhật tiếp tục trong thời gian sắp tới khi có phiên bản Selenium mới cũng như những điểm hay đáng chú ý cho mọi người.

Tất cả những thay đổi thì mọi người có thể xem tại đây: https://github.com/SeleniumHQ/selenium/releases