使用 JavaScript 通過 XPath 獲取元素
- 什麼是 Selenium
- 什麼是 Selenium-WebDriver
- Selenium 中的 XPath 是什麼
- 在 Selenium WebDriver 中使用 JavaScript 通過 XPath 獲取元素
本文將討論如何在 Selenium WebDriver 中使用 JavaScript 通過 XPath 獲取元素。
什麼是 Selenium
Selenium 是一個自動化測試框架,用於在 Google Chrome、Mozilla Firefox、Safari 等多種瀏覽器中測試網站應用程式。
JavaScript、Java、Python 和 C# 等多種程式語言可以在 Selenium 中建立測試指令碼。如果你使用的是 Selenium 提供的工具,則可以稱為 selenium 測試。
Selenium 不是一個單一的工具,而是由多個可用於不同型別測試的軟體組成,例如:
- Selenium Grid
- Selenium WebDriver
- Selenium 遠端控制 (RC)
- Selenium 整合開發環境(IDE)。
什麼是 Selenium-WebDriver
Selenium-Webdriver 用於通過使用各種程式語言(如 JavaScript、Java、Python、C# 等)在多個瀏覽器上執行測試指令碼來執行測試。
Selenium-Webdriver 用於確保 Web 應用程式在生產環境中正常工作。它可以為你建立一個虛擬環境來測試應用程式。
selenium web 驅動程式有四個主要部分。
- 瀏覽器
- 瀏覽器驅動程式
- Selenium 客戶端庫
- JSON 有線協議
Selenium 中的 XPath 是什麼
XPath 用於遍歷網頁的 XML 和 HTML 結構。
如果不使用 id、class 等 CSS 選擇器,XPath 可以在網頁上找到元素。XPath 可用於查詢靜態和動態元素(其屬性可能因某些事件而改變)。
Selenium 中有兩個 XPath。
- 絕對路徑
- 相對路徑
絕對路徑
你可以在絕對路徑中指定要定位的元素,從根標籤 HTML
標籤開始。然後,你可以通過定位子元素並使用正斜槓附加它們來向前移動。
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Absoulte Path</title>
</head>
<body>
<form id="login-form">
<input name="name" type="text" />
<input name="email" type="text" />
<input name="password" type="password" />
<button>Login</button>
</form>
</body>
</html>
看看上面的原始碼;我們需要給出指向第一個輸入
的路徑。
html/body/form/input[1]
這將首先訪問 HTML
元素、body
元素,然後是 form
,然後再移動到表單內的第三個輸入元素。
相對路徑
相對路徑與絕對路徑的不同之處在於它可以直接定位 HTML
元素。因此,在上面的原始碼中,我們將編寫雙正斜槓(表示它是相對路徑),然後從那裡遍歷,類似於在絕對路徑中的方式。
///form/input[1]
在 Selenium WebDriver 中使用 JavaScript 通過 XPath 獲取元素
document.evaluate
可以通過向其傳遞 XPath 表示式來獲得 XPath 結果。
let HeadingElements = document.evaluate(
'/html/body//p', document, null, XPathResult.ANY_TYPE, null);
let NextHeading = HeadingElements.iterateNext();
let HeadingTexts = '';
while (NextHeading) {
HeadingTexts += NextHeading.textContent + '\n';
NextHeading = NextHeading.iterateNext();
}
console.log(HeadingTexts);
上面的原始碼將針對每個目標段落元素(因為提供了 XPath)。它將取出每個段落的文字內容,將其附加到變數並登出結果。