使用PhantomJS和GhostDriver从WebDriver或RemoteWebDriver进行网络监视

时间:2013-06-18 20:49:52

标签: java automation webdriver phantomjs ghostdriver

我希望通过WebDriver / RemoteWebDriver使用PhantomJS来监控和测试整个页面加载过程中的网络活动。我已经达到了PhantomJS可以完成Chrome或Firefox可以加载页面,访问DOM等所有功能的程度。

但是,我不知道从哪里开始,以便能够像我在JavaScript PhantomJS示例中看到的那样访问请求和响应HTTP头。 GhostDriver Javadocs似乎没有提及它。

有没有人这样做过?

3 个答案:

答案 0 :(得分:2)

WebDriver API doesn't expose HTTP request and response headers或状态代码。 PhantomJS可能允许您获取它们,但WebDriver API不会公开它们。在项目的某些用户中,它是point of some contention,但它不会改变,而且这个决定有good and sufficient reasons。您可以通过巧妙地使用WebDriver的executeScript()方法来操纵PhantomJS检索该信息的能力(如果允许的话),但我真的不知道这是否有效。

答案 1 :(得分:1)

尝试使用Jaunt API。它无头,支持检索响应头。

功能包括(取自链接):

  

HTML,XHTML,XML解析。   协议:HTTP,HTTPS,基本身份验证。   通过字段标签/名称/序列填写表格。   自动形式排列。   文件下载/上传。保存完整的网页(图片,js,css,   等等)。表数据提取。   DOM导航,搜索&搜索链。   启用正则表达式的查询。 HTTP标头/ cookie操作。   HTTP / HTTPS代理支持。   可定制的缓存和内容处理程序。分页发现。 100%   Java(无依赖关系)

答案 2 :(得分:1)

基于this answer,我能够在Java和Selenium 3.4中使用它。

在项目中创建资源文件;称之为netlog.js

var page = this;
page.onResourceRequested = function(request) {
  console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function(response) {
  console.log('Receive ' + JSON.stringify(response, undefined, 4));
};

然后从您的Java代码中启用这样的日志记录:

import org.apache.commons.io.IOUtils;
String script = IOUtils.toString(getClass().getResourceAsStream("/netlog.js"));
((PhantomJSDriver) driver).executePhantomJS(script);

所有日志记录都将转到stderr。

关于PhantomJS site还有一些额外的讨论。