【问题标题】:Getting an empty JavaScript Array in Java (Selenium test)在 Java 中获取一个空的 JavaScript 数组(Selenium 测试)
【发布时间】:2014-09-24 11:35:46
【问题描述】:

我需要在 Java 变量的 JavaScript 脚本中声明一个空数组。

JavaScript 数组在网页上是这样声明的:

tc_vars["products"] = new Array();

(我只需要products 的数组,而不需要tc_vars 的数组)。

这就是我尝试在 Java 中获取此变量的方式:

Object[] value = (Object[]) js.executeScript("return tc_vars['products'];");

(其中js 是与Selenium WebDriver 关联的JavascriptExecutor)。

我通常使用这种方法来获取字符串没有问题,但它似乎不适用于空数组。此外,我没有任何错误消息,WebDriver 只是崩溃了。

executeScript 方法返回一个Object 变量。将其转换为 String(当 JS 变量为字符串时)效果很好,但我没有机会将这个空数组转换为 String[]Object[]

【问题讨论】:

  • 注意你的问题的标题:你不想在“Java”(通用)中得到它,你想在 Selenium 测试中得到它,这实际上是一个非常罕见的情况是想要执行此操作的有效要求。我会编辑,如果我是你,你现在提出的方式是一个很大的诱惑,让人们不阅读这个问题,只是防御性地投反对票。
  • 至于实际问题本身:我不想开枪,但这闻起来像驱动程序中的错误。我假设某处有一个问题跟踪器,你检查这是否是一个已知的错误?
  • @Gimby 谢谢你的建议,我编辑了它。尽管驱动程序的行为看起来有问题,但实际上它总是在发生运行时错误时崩溃。我不知道 Java 会如何解释一个空的 Javascript 数组。
  • 您可以在 JavaScript 端进行 JSON.stringify 并在 Java 端进行 JSON 反序列化。
  • @sap1ens 感谢您的提示,它将在将来很有用。关于我的问题,我目前无法解决,但我会尽快尝试您的想法。

标签: java javascript arrays selenium-webdriver


【解决方案1】:

正如我在评论中提到的,您需要确保在您想要测试的地方确实可以访问tc_vars['products']。例如,手动打开浏览器,在页面中使用 selenium 请求该值,打开 devtools javascript 控制台并检查 tc_vars 的值。如果它对您不可用,它将对 selenium webdriver 不可用。

第二件事是,对于数组,selenium webdriver(至少是最新版本:2.42.2)返回ArrayList<Object> 而不是Object[]。所以你的演员应该是:

ArrayList<Object> o = (ArrayList<Object>) js.executeScript("return tc_vars['products'];");

【讨论】:

  • 谢谢!它工作得很好。当我回答您的评论时,我可以从浏览器的开发工具控制台访问 tc_vars 数组。我将您的示例与 ArrayList&lt;String&gt; 一起使用,现在我可以使用 Java 处理 Javascript 数组了。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2019-04-03
相关资源
最近更新 更多