有什么办法可以从Java代码执行javascript函数

时间:2019-10-17 13:53:42

标签: javascript java selenium

我正在尝试从Java代码执行javascript函数。

我使用了硒包中的JavascriptExecutor。

我尝试了以下代码

  JavascriptExecutor js;
  js.executeScript("let time;");
  js.executeScript("time = 2;");
  js.executeScript("function f(){console.log(time);}");
  js.executeScript("f()");

这是输出

Exception in thread "Thread 0" 
org.openqa.selenium.JavascriptException: javascript error: f is not defined

是否可以通过Java代码执行上述脚本?有可能吗?

2 个答案:

答案 0 :(得分:1)

尝试一下:

String script = "let time;time = 2;function f(){console.log(time);}f()";
JavascriptExecutor js;
js.executeScript(script);

答案 1 :(得分:1)

您可以使用窗口属性(或任何真正的内置属性),这些属性会一直存在:

    @Test
    public void reportingTest() throws Exception {

        ContextRefreshedEvent contextRefreshedEvent = PowerMockito.mock(ContextRefreshedEvent.class);

        Method privateMethod = ReportingProcessor.class.
                getDeclaredMethod("collectEnvironmentData", ContextRefreshedEvent.class);

        privateMethod.setAccessible(true);

        String returnValue = (String)
                privateMethod.invoke(reportingProcessor, contextRefreshedEvent);
        Assert.assertEquals("Test", returnValue);
    }