Open6
JavaScript Tip
何をやっているか理解できなかった。
利点はあるのだろうか。
a = [];
a[a.length] = 1;
a[a.length] = 2;
console.log(a, a.length)
b = [];
b.push(1);
b.push(2);
console.log(b, b.length)
イベントリスナーを取得する
Chrome developer tools
getEventListeners(element)
Firefox
開発ツールで該当要素のeventを調べる
Selenium
グローバル関数を無効化する
以下のような関数があった場合、
function f() {
console.log("f");
}
以下のようにする
window.f = ()=>{};
send_keys()
を置き換える
- 速度が速くなる。
- 状態に左右されない。(欠点でもあるけど)
-
clear()
は必要ない。
Input = """\
arguments[0].value = arguments[1];
const keydownEvent = new KeyboardEvent('keydown', {keyCode: 13, key: 'Enter'});
arguments[0].dispatchEvent(keydownEvent);
const keyupEvent = new KeyboardEvent('keyup', {keyCode: 13, key: 'Enter'});
arguments[0].dispatchEvent(keyupEvent);
"""
element = driver.find_element(...)
driver.execute_script(Input, element, "...")
EventListenerをすべて削除する
碌にテストしていないので注意。
削除されることはされる。
ただし、副作用は当然存在する。
<div id="div1">
hoge
</div>
element = document.getElementById("div1");
element.addEventListener("click", ()=>{console.log("click")})
clone = element.cloneNode(true);
clone.textContent = "hage";
element.replaceWith(clone);
XPath
function getElementByXpath(path) {
return document.evaluate(
path,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
}
function getElementsByXpath(path) {
result = document.evaluate(
path,
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
elements = [];
for (let i = 0; i < result.snapshotLength; ++i) {
elements.push(result.snapshotItem(i));
}
return elements
}
表示されているか判定
もっとうまいやり方があるけど
function isDisplayed(element, limit = null) {
while (element.nodeType === 1) {
if (limit !== null && element === limit.parentNode) {
return true;
}
console.log(element.tagName.toLowerCase());
style = window.getComputedStyle(element);
if (
style.getPropertyValue("display") === "none" ||
style.getPropertyValue("visibility") === "hidden"
) {
return false;
}
element = element.parentNode;
}
return true;
}