在進行 click、input、scroll 等操作時,有時會遇到元素無法或很難操作的情況。這時可以考慮使用 WebDriver 的 execute_script() 執行 JavaScript 操作 DOM。
以下整理一些常見範例:
選取元素
document.getElementById("example");
document.getElementsByClassName("example");
document.getElementsByName("example");
document.querySelector("[attribute='value1']"); // 選取第一個符合的元素
document.querySelectorAll("input[attribute='value2']"); // 選取所有符合的元素
document.getElementsByTagName("input"); // 選取所有 input 元素
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(); // 選取第三個符合的按鈕並點擊
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 判斷的頁面,可能表面看起來操作成功,但實際上並未觸發預期效果。