繁体   English   中英

JavaScript单击在控制台中有效,但在Selenium execute_script中无效

[英]JavaScript click works in console but not inside Selenium execute_script

我正在使用Selenium来测试站点,其想法是从table获取所有rows ,选择可见的buttons然后click它们。 单击后,将触发一个事件,并使用AJAX将数据加载到rows正下方。

以下代码可在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 ,它们显示在控制台中,但根本不会触发click事件。 有趣的是,尝试使用Selenium运行代码后,从控制台运行JavaScript效果不佳。

我还尝试将这些rows作为array返回并单击Selenium,但这会使事情变得复杂,因为我得到了陈旧的元素异常。 为了确保它能正常工作,我需要在每次单击等后重新获取table rows

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

请尝试以下操作:

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,应使用""" (开始和结束)。

希望对您有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM