【发布时间】:2018-12-26 05:39:10
【问题描述】:
我正在使用 Selenium 测试一个站点,其想法是从 table 中获取所有 rows,选择可见的 buttons,然后选择 click 它们。单击后会触发一个事件,并在 rows 正下方加载 AJAX 数据。
以下代码在 Firefox 控制台中完美运行。实际上点击如此之快以至于项目都被一次加载(最多有 10 行,所以我不会费心添加等待事件)。
function button_visible(row) {
var opacity = row.style.opacity;
if (opacity == "" || opacity == 1) {
return true;
} else {
return false;
}
}
var table = document.querySelectorAll('div>.table');
for (x = 1; x < table.length; x++) {
row = table.item(x);
var row_buttons = row.querySelectorAll('icon-button');
for (var i = 0; i < row_buttons.length; i++) {
if (button_visible(row_buttons.item(i))) {
row_buttons.item(i).click();
}
}
}
从 Selenium 运行这个 JavaScript 不起作用:
js='function button_visible(row) {var opacity = row.style.opacity; if (opacity === "" || opacity == 1) {return true;} else {return false;}} var table = document.querySelectorAll('div>.table'); for (x = 1; x < table.length; x++) {var row = table.item(x); var row_buttons = row.querySelectorAll('icon-button'); for (var i = 0; i < row_buttons.length; i++) {if(button_visible(row_buttons.item(i))){ row_buttons.item(i).click();}}}'
driver.execute_script(js)
添加了console.log's,它们显示在控制台中,但根本没有触发点击事件。有趣的是,在尝试使用 Selenium 运行代码后,从控制台运行 JavaScript 并不能正常工作。
我还尝试将这些 rows 作为 array 返回并单击 Selenium,但这只会使事情变得复杂,因为我得到了陈旧的元素异常。为了确保它正常工作,我需要在每次点击后重新获取 table rows 等。
我什至想不出这不起作用的原因。有意见吗?
【问题讨论】:
标签: javascript python selenium