繁体   English   中英

如何从 Java 中的 JavascriptExecutor.executeScript() 方法返回值

[英]How to return value from JavascriptExecutor.executeScript() method in java

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

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


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

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

有没有办法在 selenium JavascriptExecutor的 API 的帮助下将值从 js 文件返回到 java 文件?

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

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

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

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

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

试试下面的代码,

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

请尝试以下操作:

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

暂无
暂无

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

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