javascript selenium Node.js:如何在多个重叠的元素上单击同一个按钮?

pgky5nke  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(125)

我正在使用Selenium,在关闭几个HTML元素时遇到了一个问题,这些元素有相同的“关闭”按钮。这些元素彼此重叠。我的想法是循环通过它们并逐个关闭,但似乎不起作用。
首先,我得到了所有的“关闭”按钮:

let by = By.className("jsPanel-btn jsPanel-btn-close jsPanel-btn-md");
let panelsCloseBtns = await this.getElements(by); //custom func to get close button by xpath

它返回Selenium元素数组。
然后我尝试了3种方法,但它只适用于第一个元素:
使用操作:

// Close buttons one by one
for (let i=0; panelsCloseBtns.length; i++) {
    if (i === panelsCloseBtns.length) break;
    try{
        await this.driver.actions().mouseMove(panelsCloseBtns[i]).click().perform();
    }catch(ElementClickInterceptedError) {
        await this.driver.actions().mouseMove(panelsCloseBtns[i]).click().perform();
    }
}

它单击第一个元素,然后我得到错误ElementClickInterceptedError
使用执行脚本

for (let i=0; panelsCloseBtns.length; i++) {
    if (i === panelsCloseBtns.length) break;
    await this.driver.executeScript(`arguments[${i}].click();`, panelsCloseBtns[i]);
}

与行动的结果相同
第三种方法是点击按钮

for (let i=0; panelsCloseBtns.length; i++) {
    if (i === panelsCloseBtns.length) break;
    panelsCloseBtns[i].click();
}

与行动的结果相同
我不知道,如何解决这个问题。

km0tfn4u

km0tfn4u1#

这是不对的

await this.driver.executeScript(`arguments[${i}].click();`, panelsCloseBtns[i]);

它应该总是arguments [0]因为你只传递了一个参数。
但您同时单击了所有这些选项,这可能会导致问题

相关问题