Khởi tạo đối tượng Webdriver trong Selenium
Khi thực hiện việc UI automation sử dụng Selenium WebDriver, các bạn hay viết một câu lệnh này rất thường xuyên để khởi tạo browser, đó là:
Tùy thuộc vào loại browser mà chúng ta muốn khởi tạo thì chúng ta có thể thay FirefoxDriver() bằng ChromeDriver(), InternetExplorerDriver(),... Nhưng có khi nào bạn tự hỏi tại sao chúng ta lại cần tạo 1 biến thuộc kiểu WebDriver không? Và nếu chúng ta trực tiếp dùng kiểu cụ thể của driver trình duyệt đó luôn thì sao ? Ví dụ như sau:
Các bạn đoán xem dòng code trên có sai hay không? Nếu không sai thì lợi ích của việc dùng WebDriver có những gì. Chúng ta cùng tìm hiểu nhé.
WebDriver là gì?
WebDriver là một interface được cung cấp bởi Selenium WebDriver. Như chúng ta biết thì các interface trong Java là tập hợp của các method chưa được implement. Interface WebDriver đề ra template cho các browser cụ thể như ChromeDriver, FireFoxDriver,... phải follow theo. Interface WebDriver khai báo sẵn các method như là get(), navigate(), close(), sendKeys(),... và các developer phải implement các methods này cho từng loại browser.
Lấy ví dụ về ChromeDriver, nó được developed bởi các developers ở Chromium team, các developers của Selenium không cần lo lắng về việc implement chi tiết của driver này.
Vậy có đúng không khi chúng ta code như sau:
Nó hoàn toàn đúng nha các bạn. FirefoxDriver là implementing class của interface WebDriver và đoạn code trên sẽ launch trình duyệt Firefox.
Quay trở lại với câu hỏi, tại sao chúng ta lại cần biến driver thuộc kiểu WebDriver thay vì FirefoxDriver (tương tự cho các browser khác)?
Bởi vì WebDriver cho phép chúng ta assign đối tượng driver tới các loại browser driver khác nữa. Điều nay đồng nghĩa nó cho phép chúng ta test multi-browser bằng cách gán đối tượng driver cho bất kỳ browser driver khác