2025-04-04

自動測試的其他操作元素方式 - 使用 execute_script 執行 JavaScript 操作 DOM

在進行 click、input、scroll 等操作時,有時會遇到元素無法或很難操作的情況。這時可以考慮使用 WebDriver 的 execute_script() 執行 JavaScript 操作 DOM。

以下整理一些常見範例:

選取元素


  • 使用 ID 選取

document.getElementById("example");


  • 使用 class name 選取

document.getElementsByClassName("example");


  • 使用 name 選取

document.getElementsByName("example");


  • 使用 CSS 選取

document.querySelector("[attribute='value1']"); // 選取第一個符合的元素

document.querySelectorAll("input[attribute='value2']"); // 選取所有符合的元素


  • 使用 tag name 選取

document.getElementsByTagName("input"); // 選取所有 input 元素


  • 使用 XPath 選取

document.evaluate("//*[text()='example']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;


操作元素

選取後可進行修改、點擊、滾動等操作。


  • 點擊元素

document.getElementById("example").click();


  • 點擊多個元素中的其中一個

var a = document.getElementsByClassName("ui example button");

a[2].click(); // 選取第三個符合的按鈕並點擊


  • 修改 value 值

document.getElementById("example").value = "20";


修改其他 attribute 的值

  • document.getElementById("Mobility").selectedIndex = 12; // 設定 select 選擇的索引值


  • 移除屬性

document.getElementsByName("example")[0].removeAttribute("hidden"); // 移除 hidden 屬性


  • 捲動元素到視窗可見範圍

arguments[0].scrollIntoView();


  • 捲動元素到視窗中間

arguments[0].scrollIntoView({ block: 'center' });


⋯⋯

總之 JS 有的都可以用。

execute_script  不僅限於不能操作時才用得到,像是想要觀察游標位置等,也可以用 JS 顯示游標的移動。

但 execute_script 並不是真正的操作,所以在以 event 判斷的頁面,可能表面看起來操作成功,但實際上並未觸發預期效果。