Javascript 尝试通过selenium访问highcharts时超出了最大调用堆栈大小

Javascript 尝试通过selenium访问highcharts时超出了最大调用堆栈大小,javascript,google-chrome,selenium,highcharts,Javascript,Google Chrome,Selenium,Highcharts,诚然,这个有点晦涩难懂。我试图做的是通过驱动程序从selenium驱动的chrome实例访问highchart数据 driver.execute_script("return $('#chartID').highcharts().series[0].data") Selenium引发错误Selenium::WebDriver::error::UnknownError未知错误:超过最大调用堆栈大小 driver.execute_script("return $('#chartID').highc

诚然,这个有点晦涩难懂。我试图做的是通过
驱动程序从selenium驱动的chrome实例访问highchart数据

driver.execute_script("return $('#chartID').highcharts().series[0].data")
Selenium引发错误
Selenium::WebDriver::error::UnknownError
未知错误:超过最大调用堆栈大小

driver.execute_script("return $('#chartID').highcharts()")
driver.execute_script("return Highcharts.charts")
两者都返回相同的错误

应该注意的是,这两个javascript行都在非selenium chrome实例的开发控制台中工作


这是我正在使用的指南:

Ruby 1.9.x和更高版本使用具有自己堆栈的VM。在Ruby 2.0.0及更高版本中,VM堆栈的大小可以通过Ruby_THREAD_VM_stack_size环境变量来控制

要设置环境变量,请转到系统属性->高级选项卡->环境变量

参考文献

因此,我基本上是通过对返回的数据数组使用
reduce
函数来减少从
execute\u script
返回的数据量

driver.execute_script <<-js
  return Highcharts
           .charts[0]
           .series[0]
           .data
           .map(function (data) { return data.y })
js

driver.execute\u脚本您应该创建一个jsbin或一个JSFIDLE来重现问题。这不可能,因为selenium脚本是ruby,它运行一个chrome实例并将javascript传递给它执行。让我详细解释一下。1.创建一个jsbin或一个jsiddle,设置该jsbin或jsiddle,以便当您运行一个Ruby脚本,该脚本针对这个jsbin或jsiddle复制整个脚本的相关部分时,您可以获得与您在问题中报告的行为相同的行为。2.将复制问题(在上面1中创建)的较小Ruby脚本粘贴到您的问题中。这绝不是不可能的。我认为jsbin/jsfiddle在这里没有帮助。假设我设置了一个JSFIDLE,其中有一个指向highcharts库的链接,我有一行ruby试图执行
驱动程序。执行脚本(“return highcharts”)
除非您安装了ruby selenium gem并能够对JSFIDLE的输出页面进行测试,否则这不会有帮助。我猜这是一个大小问题,它无法处理从execute_脚本调用返回的数据的大小。至少这是我能在网上找到的。虽然这个链接可以回答这个问题,但最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能会无效。酷,下次会记住这一点。:)