我正在使用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();
}
与行动的结果相同
我不知道,如何解决这个问题。
1条答案
按热度按时间km0tfn4u1#
这是不对的
它应该总是arguments [0]因为你只传递了一个参数。
但您同时单击了所有这些选项,这可能会导致问题