使用HtmlUnit,是否可以暂停执行Javascript,然后继续执行?

时间:2019-12-03 18:07:20

标签: htmlunit

在HtmlUnit中进行测试时,遇到一种情况,在页面加载时,不自动执行Java脚本而是等待我启动并告诉Javascript开始执行会很有用吗?

我的特定用例是测试某些内容,然后Javascript对其进行一些测试,然后进行位置替换以将用户发送到另一个页面。我想检查返回的一些标头以进行测试/验证,然后照常执行JS。

我目前的想法是在测试时将一个标志传递给页面,这将导致JS无法自动运行,并等待直到我通过webClient.getJavaScriptEngine().execute()从Java代码中调用JS函数。

2 个答案:

答案 0 :(得分:0)

虽然不能具体地在调用前暂停JavaScript,但值得使用WebConnectionWrapper类来检查/修改响应数据或传出请求,从而有效地为您提供了在调用之前执行自己的代码的机会。调用了JavaScript。

此用法的示例如下:

 try (final WebClient webClient = new WebClient()) {
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        // set more options

        // create a WebConnectionWrapper with an (subclassed) getResponse() impl
        new WebConnectionWrapper(webClient) {

            public WebResponse getResponse(WebRequest request) throws IOException {
                WebResponse response = super.getResponse(request);
                if (request.getUrl().toExternalForm().contains("my_url")) {
                    String content = response.getContentAsString();

                    // intercept and/or change content

                    WebResponseData data = new WebResponseData(content.getBytes(),
                            response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
                    response = new WebResponse(data, request, response.getLoadTime());
                }
                return response;
            }
        };

        // use the client as usual
        HtmlPage page = webClient.getPage(uri);
    }

以上代码来自此处的官方文档:

How to modify the outgoing request or incoming response?

将在每次请求发出之前调用将覆盖的getResponse()方法,该方法还允许您修改传递回WebClient进行继续处理的WebResponse对象。

答案 1 :(得分:0)

对不起,但目前(版本2.43.0),我们没有这样的选择。随时在github上打开一个问题。 我猜想其他测试工具也可能会受益于此功能。

相关问题