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

时间:2017-06-21 10:19:55

标签: javascript java selenium selenium-webdriver

我在java文件中编写了一个方法,并使用该java文件方法中的帮助org.openqa.selenium.JavascriptExecutor调用一个用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 API的帮助下将值从js文件返回到java文件 JavascriptExecutor

4 个答案:

答案 0 :(得分:1)

请尝试以下代码

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

答案 1 :(得分:1)

JavascriptExecutor.executeScript("<javascript code>")允许您执行JavaScript代码,但是当您传递给executeScript的代码返回值时,Selenium将无法知道运行时的确切返回类型,因为JavaScript可以返回{{1 }},NumberStringArray等。

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

  • 对于js return中的HTML元素,此方法返回executeScript
  • 对于小数,返回WebElement
  • 对于非十进制数字,将返回Double
  • 对于布尔值,返回Long
  • 对于所有其他情况,将返回Boolean
  • 对于数组,请按照上述规则为每个对象返回String
  • 对于地图,请返回符合上述规则的值List<Object>。 除非值为null或没有返回值,否则返回null

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

尝试以下操作:

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