JavaScript 单击可以在控制台中工作,但不能在 Selenium 中执行脚本

标签 javascript python selenium

我正在使用 Selenium 来测试网站,其想法是从中获取所有,选择可见的按钮,然后单击它们。单击后,将触发一个事件,并使用 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,它们显示在控制台中,但根本不触发点击事件。有趣的是,在尝试使用 Selenium 运行代码后,从控制台运行 JavaScript 不起作用。

我还尝试将这些作为数组返回并使用Selenium单击,但这只会使事情变得复杂,因为我遇到了过时的元素异常。为了确保它有效,我需要在每次点击等后重新获取表格行

我什至想不出为什么这行不通的原因。有意见吗?

最佳答案

尝试以下操作:

driver.execute_script("""
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();

          }

     }

}
""")

PS:要在 Selenium (Python) 中运行多行 JS,应使用 """ (开始和结束)。

希望对你有帮助!

关于JavaScript 单击可以在控制台中工作,但不能在 Selenium 中执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51399675/

相关文章:

python - 来自 pandas 的 JS 数据表

python - Tensorflow Dataset.from_generator 在tensorflow 2.0中是否已弃用?它抛出 tf.py_func 弃用错误

python - 使用 Python Selenium WebDriver 进行异常处理的返回值

python - 使用 pandas 的 df.to_csv 方法不适用于空格作为分隔符

javascript - 如何使点击 div 重定向到另一个页面的 anchor

javascript - 获取 X,Y 坐标并在单击图标时传递值 (JQuery)

javascript - 未捕获( promise )TypeError : Already read

java - Selenium WebDriver 和 InternetExplorer

java - WebDriverException : Failed to connect to binary FirefoxBinary(C:\Program Files\Mozilla Firefox\firefox. exe) 与 GeckoDriver Firefox 和 Selenium Java

javascript - Bootstrap 导航栏折叠不起作用