如何使用Selenium WebDriver和JavaScript登入任何網站?
如今,自動化對於測試應用程式非常有用。許多自動化工具可用,Selenium就是其中之一,它開發於2004年。它也是一個跨平臺工具,因此我們可以將Selenium與大多數程式語言一起使用,這裡我們將它與JavaScript一起使用。
使用者需要建立NodeJS應用程式才能將Selenium WebDriver與JavaScript一起使用。
建立NodeJS應用程式
使用者可以按照以下步驟建立NodeJS應用程式。
步驟1 – 在終端中開啟專案目錄並輸入以下命令。
npm init -y
步驟2 – 現在,在專案目錄中輸入以下命令,以在專案中安裝selenium-webdriver NPM包。
npm install selenium-webdriver
步驟3 – 使用者還需要安裝Chrome WebDriver才能將Selenium與Chrome瀏覽器一起使用。使用以下命令安裝Chrome驅動程式。
npm install chromedriver
步驟4 – 建立一個app.js檔案並新增登入任何網站的程式碼。
步驟5 – 執行以下命令來執行app.js檔案的程式碼。
node app.js
演算法
使用者可以按照以下步驟登入任何網站。
步驟1 – 匯入“chromedriver”和“selenium-webdriver”。
require("chromedriver"); let seleniumDriver = require("selenium-webdriver");
步驟2 – 開啟瀏覽器視窗。
let seleniumBuilder = new seleniumDriver.Builder(); let browserTab = seleniumBuilder.forBrowser("chrome").build();
步驟3 – 在瀏覽器標籤頁中開啟URL。
let browserWindow = browserTab.get("URL");
步驟4 – 解析Promise。使用CSS選擇器查詢使用者名稱輸入欄位。要查詢CSS選擇器,使用者應訪問相應的網頁。例如,在本例中,請訪問“https://practicetestautomation.com/practice-test-login/”網頁。
使用者將看到以下介面。
之後,右鍵單擊使用者名稱輸入欄位。它將顯示一個選單,使用者需要選擇名為“檢查”的最後一個選項。
這將開啟Chrome開發者工具。在此工具中,使用者需要找到元素並獲取其ID或類名。
在本例中,我們將使用使用者名稱輸入欄位的ID作為CSS選擇器。此處,使用者名稱欄位的ID為“username”。
let userInputBox = browserTab.findElement( seleniumDriver.By.css("#username") );
步驟5 – 將使用者名稱作為鍵傳送到使用者輸入框。
let sendUserName = userNameInput.sendKeys("student");
步驟6 – 使用CSS選擇器查詢密碼輸入欄位,並將密碼作為鍵傳送,就像使用者名稱一樣。
步驟7 – 查詢登入按鈕,並使用click()方法單擊按鈕。
continueBtn.click();
步驟8 – 使用Selenium登入成功。
示例
在下面的示例中,我們按照上述步驟使用Selenium WebDriver登入“https://practicetestautomation.com/practice-test-login/”網站。首先,我們使用setTimeOut()函式設定5秒的超時,以克服慢速連線。
之後,我們使用Promise鏈獲取使用者名稱,將鍵傳送到使用者名稱,獲取密碼輸入,將鍵傳送到密碼,找到登入按鈕,並單擊登入按鈕。
// import chrome driver require("chromedriver"); // import selenium webdriver let seleniumDriver = require("selenium-webdriver"); // get the browser instance let seleniumBuilder = new seleniumDriver.Builder(); let browserTab = seleniumBuilder.forBrowser("chrome").build(); // open the browser let browserWindow = browserTab.get("https://practicetestautomation.com/practice-testlogin/"); // resolve promises browserWindow .then(function () { // set timeout for connection delay let timeOut = browserTab.manage().setTimeouts({ implicit: 5000, }); return timeOut; }) .then(() => { // get a user input box let userInputBox = browserTab.findElement( seleniumDriver.By.css("#username") ); return userInputBox; }) .then((userNameInput) => { // send username keys let sendUserName = userNameInput.sendKeys("student"); return sendUserName; }) .then(() => { console.log("Username filled!"); // get a password input box let userPasswordBox = browserTab.findElement( seleniumDriver.By.css("#password") ); return userPasswordBox; }) .then((passwordInput) => { // send password keys let sendPasswords = passwordInput.sendKeys("Password123"); return sendPasswords; }) .then(() => { console.log("Password filled!"); // get the continue button let continueButton = browserTab.findElement( seleniumDriver.By.css("#submit") ); return continueButton; }) .then((continueBtn) => { // click on the continue button continueBtn.click(); console.log("SignIN completed!"); }) .catch(function (error) { console.log("Error ", error); });
輸出
在上面的輸出中,使用者可以觀察到,首先,它開啟一個瀏覽器視窗,然後開啟URL,將憑據填充到輸入中並單擊提交按鈕。
使用者可以在控制檯中觀察到以下訊息。
示例
在下面的示例中,我們使用Selenium WebDriver來自動登入“https://dev.to/enter”網站。我們使用“user_email”ID查詢使用者名稱欄位,使用“user_password”欄位查詢密碼欄位。
使用者需要確保他們在“dev.to”網站上擁有帳戶。測試以下程式碼時,請確保將<your_username>替換為您的電子郵件,將<your_password>替換為您的密碼。
require("chromedriver"); let seleniumDriver = require("selenium-webdriver"); let seleniumBuilder = new seleniumDriver.Builder(); let browserTab = seleniumBuilder.forBrowser("chrome").build(); let browserWindow = browserTab.get("https://dev.to/enter"); browserWindow .then(function () { let timeOut = browserTab.manage().setTimeouts({ implicit: 5000, }); return timeOut; }) .then(() => { let userInputBox = browserTab.findElement( seleniumDriver.By.css("#user_email") ); return userInputBox; }) .then((userNameInput) => { let sendUserName = userNameInput.sendKeys("<Your_username>"); return sendUserName; }) .then(() => { console.log("Username filled!"); let userPasswordBox = browserTab.findElement( seleniumDriver.By.css("#user_password") ); return userPasswordBox; }) .then((passwordInput) => { let sendPasswords = passwordInput.sendKeys("<Your_password>"); return sendPasswords; }) .then(() => { console.log("Password filled!"); // get the continue button let continueButton = browserTab.findElement( seleniumDriver.By.css(".crayons-btn.crayons-btn--l") ); return continueButton; }) .then((continueBtn) => { // click on the continue button continueBtn.click(); console.log("SignIN completed!"); }) .catch(function (error) { console.log("Error ", error); });
輸出
本教程教我們如何使用Selenium WebDriver登入兩個網站。Selenium WebDriver對於自動化測試非常有用,它也用於從不同的網站抓取資料。
對於登入自動化,使用者需要透過CSS選擇器查詢輸入欄位,並需要使用Selenium WebDriver傳送鍵。最後,使用者需要使用click()方法單擊登入按鈕。如果使用者想將Selenium WebDriver與Firefox一起使用,則應安裝Firefox驅動程式而不是Chrome驅動程式。