Capabilities là các tùy chọn mà bạn có thể sử dụng để tùy chỉnh và cấu hình một ChromeDriver session. Bài này sẽ cung cấp cho bạn tất cả các capabilities mà Chrome Option hỗ trợ và cách sử dụng chúng trong Selenium WebDriver.
WebDriver APIs cung cấp cách chuyển các capability tới Chrome driver. Chính xác là cơ chế hoạt động khác nhau tùy vào ngôn ngữ, nhưng hầu như các ngôn ngữ sử dụng một hoạc cả hai cơ chế sau:
- Sử dụng class ChromeOptions. (Được hỗ trợ bởi Java, Python,…)
- Sử dụng class DesiredCapabilities. (Được hỗ trợ bởi Java, Python, Ruby,…). Dù nó hiện vẫn còn có trên Java, nhưng nó hầu như không được dùng nữa.
Class ChromeOptions
ChromeOptions là gì?
Class ChromeOptions là một khái niệm trong Selenium WebDriver dùng để thao tác các thuộc tính khác nhau của Chrome driver. Class ChromeOptions thường được sử dụng cùng với DesiredCapabilities để tùy chỉnh các phiên Chrome driver. Nó giúp bạn thực hiện nhiều thao tác khác nhau.
Cách dùng ChromeOptions
- Khởi tạo một instance thuộc ChromeOptions, instance này có các phương thức để thiết lập các đặc tính dành riêng cho ChromeDriver.
- Chuyển đối tượng (object) ChromeOptions vào ChromeDriver contructor:
Ví dụ:
ChromeOptions options = new ChromeOptions(); options.addExtensions(new File("/path/to/extension.crx")); options.addArgument("start-maximized"); ChromeDriver driver = new ChromeDriver(options);
Các argument thông dụng của ChromeOptions
Dưới đây là danh sách các argument có sẵn và được sử dụng phổ biến nhất:
- start-maximized: Mở trình duyệt Chrome ở chế độ phóng to (maximize mode)
- incognito: Mở trình duyệt Chrome ở chế độ ẩn danh (incognito mode)
- headless: Mở trình duyệt Chrome ở chế độ không có giao diện người dùng (headless mode)
- disable-extensions: Vô hiệu hóa các tiện ích mở rộng hiện có trên trình duyệt Chrome
- disable-popup-blocking: Vô hiệu hóa pop-up hiển thị trên trình duyệt Chrome
- make-default-browser: Đặt trình duyệt Chrome làm mặc định
- version: In phiên bản trình duyệt chrome
disable-infobars: Ngăn Chrome hiển thị notification ‘Chrome is being controlled by automated software” khi kiểm thử bởi Automation Test.(Bị remove trên Chromium – xem tại đây). Thay vào đó chúng ta có thể dùng theo cách sau:
options.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));
Class DesiredCapabilities
DesiredCapabilities là gì?
Class DesiredCapabilities được dùng để sửa đổi nhiều thuộc tính của web driver. Nó cung cấp các cặp khóa-giá trị (key-value) để thay đổi các thuộc tính riêng lẻ của web driver, chẳng hạn như tên trình duyệt, nền tảng trình duyệt, v.v.
DesiredCapabilities chủ yếu được sử dụng với Selenium Grid, với mục đích kiểm thử trên các trình duyệt khác nhau cho cùng một trường hớp (Test case được kiểm thử trên nhiều trình duyệt như Chrome, Firefox..).
Cách dùng DesiredCapabilities
- Bạn có thể thiết lập trực tiếp (như setBrowserName..) hoặc sử dụng phương thức setCapability – phương thức phổ biến của class DesiredCapabilities.
- Khi dùng phương thức setCapability để thay đổi các thuộc tính riêng lẻ của web driver, bạn cần biết capability_name và loại giá trị mà nó sẽ nhận.
Các capabilities thông dụng
Dưới đây là các loại capability được xác định thường được sử dụng:
Capability Name | Description |
---|---|
ACCEPT_SSL_CERTS | Thuộc tính này được sử dụng để thiết lập cho trình duyệt mặc định chấp nhập chứng chỉ SSL (accept SSL Certificates ) |
PLATFORM_NAME | Thuộc tính này được sử dụng để thiết lập hệ điều hành |
BROWSER_NAME | Thuộc tính này được sử dụng để đặt tên trình duyệt cho instance của web driver |
VERSION | Thuộc tính này được sử dụng để thiết lập phiên bản của trình duyệt (browser version) |
Cách sử dụng ChromeOptions và DesiredCapilities
Scenario: Sử dung ChromeOptions và DesiredCapabilities thực hiện:
- Mở trình duyệt chrome và để chế độ:
- Maximized mode: phóng to màn hình
- Cho phép web push notification:
- Add extension: bật tiện ích custom cursor trên trình duyệt Chrome bằng cách add file extension .
- Truy cập vào trang https://devopsify.co/
Các bước thực thi
Đầu tiên chúng ta download extension file về máy theo các bước sau:
- Vào trang https://crxextractor.com/
- Nhấp chuốt vào link Chrome WebStore để mở extension của chrome
- Nhấp chuốt vào link Custom cursor for chrome , copy URL và dán vào textbox của trang https://crxextractor.com/ -> Nhấp OK
- Button OK sẽ chuyển thành Get .crx, nhấp chuột vào để download file .crx về máy
Các bước thực thi code như sau
- Download extension custom cursor file
- Sử dụng WebDriverManager để mở trình duyệt chrome dùng cho việc kiểm thử
- Khởi tạo đối tượng thuộc class ChromeOptions
- Sử dụng phương thức addExtensions để thêm và bật extension custom cursor bằng cách upload file extension file .crx
- Thiết lập các argument khi mở trình duyêt (như phóng to màn hình, tắt notification của trình duyêt, tắt thông báo
‘Chrome is being controlled by automated software” khi chạy automation test) . - Tạo một đối tượng thuộc Chrome Desired Capabilities trong class Selenium và chuyển nó qua webdriver instance
- Hợp nhất (merge) đối tượng capabilities với đối tượng Chrome Options trước khi chuyển các argument tới Chrome Driver constructor
Code example.
package SeleniumWebDriverTutorial; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import java.io.File; import java.util.Collections; public class ChromeOptionsDesiredCapabilities { public static void main(String [] args){ WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); options.addExtensions(new File("D:\\extension_3_1_3_0.crx")); options.addArguments("start-maximized"); options.addArguments("--disable-notifications"); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(ChromeOptions.CAPABILITY, options); options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation")); options.merge(capabilities); ChromeDriver driver = new ChromeDriver(options); driver.get("https://devopsify.co/"); //driver.quit(); } }
Sau khi chạy đoạn code trên, bạn sẽ thấy chrome được bật, ở chế độ phóng to, web push notification popup không còn bât lên nữa, bên cạnh đó một tab mới được mở ra với tiện ích custpm cursor trên trình duyệt Chrome được bật.
Lưu ý:
Kể từ phiên bản Selenium 3.6.0, ChromeOptions trong Java cũng triển khai Capabilities interface, cho phép bạn chỉ định các WebDriver capabilities khác không dành riêng cho ChromeDriver
Ví dụ: Thiết lập Proxy cho trình duyệt
ChromeOptions options = new ChromeOptions(); // Add the WebDriver proxy capability. Proxy proxy = new Proxy(); proxy.setHttpProxy("myhttpproxy:3337"); options.setCapability("proxy", proxy);
Có rất nhiều lệnh có thể được sử dụng với trình duyệt Chrome. Một số thay đổi hành vi của các tính năng, một số khác là để gỡ lỗi hoặc thử nghiệm. Bạn có thể xem danh sách để thiết lập có sẵn bao gồm các điều kiện và mô tả của chúng tại đây.
Các bạn hãy thử nhé!