使用 JavaScript 通過 XPath 獲取元素

Tahseen Tauseef 2023年10月12日
  1. 什麼是 Selenium
  2. 什麼是 Selenium-WebDriver
  3. Selenium 中的 XPath 是什麼
  4. 在 Selenium WebDriver 中使用 JavaScript 通過 XPath 獲取元素
使用 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)。它將取出每個段落的文字內容,將其附加到變數並登出結果。