【问题标题】:How to return value from JavascriptExecutor.executeScript() method in java如何从 Java 中的 JavascriptExecutor.executeScript() 方法返回值
【发布时间】:2023-03-29 13:26:01
【问题描述】:

我已经在 java 文件中编写了一种方法,并在该 java 文件方法的帮助 org.openqa.selenium.JavascriptExecutor 的帮助下调用了一种在 java 脚本文件中编写的方法。这是代码sn-p:

public void validateFilename() {
    JavascriptExecutor jsExec = (JavascriptExecutor) webDriver;
    jsExec.executeScript("getFileName();");
}


function() {
    window.getFileName = function() {
        var fileName = "sampleFile.txt";
        return fileName;
    }
};

我可以从 java 文件中调用方法getFileName(),但我可以获取文件名的值。如果我给 alert(fileName) 它显示文件名但无法在 java 文件中返回该方法。

有没有办法借助 selenium JavascriptExecutor 的 API 将 js 文件中的值返回到 java 文件中?

【问题讨论】:

  • 只是好奇,.. 为什么将 getFileName 包装在 IIFE 中然后将其分配给 window

标签: javascript java selenium selenium-webdriver


【解决方案1】:

JavascriptExecutor.executeScript("<javascript code>") 允许您执行 JavaScript 代码,但是当您传递给 executeScript 的代码返回一个值时,Selenium 将不知道运行时的确切返回类型是什么,因为 JavaScript 可以返回类似 Number、@ 987654323@、ArrayObject

为了处理所有返回类型,executeScript 返回一个 'Object' 类的对象,该对象又可以处理 JavaScript 的任何返回类型。我们可以将返回的对象类型转换为以下支持的对象之一:

  • 对于js返回的一个HTML元素,该方法返回一个WebElement
  • 对于小数,返回 Double
  • 对于非十进制数,返回 Long
  • 对于布尔值,返回 Boolean
  • 对于所有其他情况,将返回 String
  • 对于数组,返回一个List<Object>,每个对象都遵循上述规则。
  • 对于地图,返回一个Map<String, Object>,其值遵循上述规则。 除非值为null或者没有返回值,其中返回null

【讨论】:

  • 这很好地回答了这个问题,但语法有点不稳定。我已经提交了一些建议的修改,使其更易于阅读。我认为这应该是公认的答案。我认为它正确地介绍和总结了 Java Selenium 文档。
【解决方案2】:

在尝试获取响应时,您需要将其转换为 String。像这样的:

String fileName = (String) jsExec.executeScript("return getFileName();");

【讨论】:

    【解决方案3】:

    试试下面的代码,

    jsExec.executeScript( "return getFileName()");
    

    【讨论】:

    • 我试过这个 Object o= jsExec.executeScript("return getFileName()");但在那里得到空值
    【解决方案4】:

    尝试以下方法:

     String txt = "return document.title";
     JavascriptExecutor js = (JavascriptExecutor) driver;
     String res = (String)js.executeScript(txt);
    

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多