在HtmlUnit中进行测试时,遇到一种情况,在页面加载时,不自动执行Java脚本而是等待我启动并告诉Javascript开始执行会很有用吗?
我的特定用例是测试某些内容,然后Javascript对其进行一些测试,然后进行位置替换以将用户发送到另一个页面。我想检查返回的一些标头以进行测试/验证,然后照常执行JS。
我目前的想法是在测试时将一个标志传递给页面,这将导致JS无法自动运行,并等待直到我通过webClient.getJavaScriptEngine().execute()
从Java代码中调用JS函数。
答案 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上打开一个问题。 我猜想其他测试工具也可能会受益于此功能。