【问题标题】:Is there a way to return an Object from JavaScript in Java using Selenium JavascriptExecutor?有没有办法使用 Selenium JavascriptExecutor 从 Java 中的 JavaScript 返回一个对象?
【发布时间】:2021-09-15 22:12:32
【问题描述】:

我在使用 Java 运行 JavaScript 文件时遇到问题,我使用 Selenium 登录我的应用程序并使用 JavascriptExecutor 运行我的 JavaScript 文件,但我无法从它收到有效的返回,只有 null。

这是我的代码中的 sn-p:

public static void runJavascriptFile(ChromeDriver driver) throws Exception {
        System.out.println("Start");
        Object js = driver.executeScript(TestHelper.getTextFromFile("demo-client/scripts/get-test.js"));
        System.out.println(js);
        System.out.println("End");

    }

我的 js 文件包含以下内容:

async function getPeople() {
    let response = await fetch("https://swapi.dev/api/people/1/", { method: "GET" })
    console.log("This is from my Javascript File from Java.")
    return response.status;
}
let result = await getPeople();
console.log("result", result);

在这里,我可以在 Chrome 浏览器控制台中看到 JavaScript 文件的返回,但在 Java IDE 中我不能: BrowserConsoleXJavaConsole

如果有人知道另一种可行的方法,请提供帮助!

【问题讨论】:

    标签: javascript java selenium


    【解决方案1】:

    您可以将其解析为字符串:

    JavascriptExecutor jsExec = (JavascriptExecutor) driver;
    String fileContent = (String) jsExec.executeScript("some js code here to get the file content");
    System.out.println(fileContent);
    

    【讨论】:

    • 我现在刚刚尝试了这种方法,但它也返回了null。
    • 你在 JS 调用 TestHelper.getTextFromFile("demo-client/scripts/get-test.js") 中使用它——这看起来就像在读取一个文件。你到底想做什么?
    • 没错,它只从它的位置读取一个文件,如果我删除这个辅助方法并在那里使用我的完整代码,我仍然会收到空值,如下所示。 String fileContent = (String) jsExec.executeScript("javascript code");我需要能够让这个 JavaScript 文件返回到我的 Java 代码,这样我才能看到输出并在以后为每个执行的 JavaScript 文件记录它。
    猜你喜欢
    • 2012-08-28
    • 2015-11-29
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多