捕获 Selenium Web 驱动程序 Json-wire HTTP 交互

Capturing Selenium Web-driver Json-wire HTTP interactions

Selenium Webdriver 通过 HTTP 与任何浏览器交互,如所讨论的 - here。 我在 JavaScript 中通过 Protractor 框架使用 selenium 编写了一些自动化测试。

我的用例是我想要一种干净的方式来记录源自我的基于 JS 的测试用例与浏览器的所有交互,包括 - 用户操作模拟和源自测试用例的任何 DOM 询问。

记录这些互动的最简单方法是什么?

Protractor 是 Webdriverjs , so you should be able to use addEventListener command to add any browser supported events 的包装器,它将涵盖大多数用户操作和 DOM 询问

请注意,目前仅 chrome

支持此功能

此外,这是 webdriver.js 中的一项实验性功能,因此必须添加

var client = WebdriverJS.remote({
    logLevel: 'verbose',
    experimental: true, // <-- enables browser side eventhandling
    desiredCapabilities: {
        browserName: 'chrome'
    }
});

然后注册事件如

client
    .url('http://google.com')
    .addEventListener('dblclick','#hplogo', function(e) {
        console.log(e.target); // -> 'id("hplogo")'
        console.log(e.type); // -> 'dblclick'
        console.log(e.clientX, e.clientY); // -> 239 524
    })
    .doubleClick('#hplogo') // triggers event
    .end();

您可以使用 removeEventListener 取消注册任何已注册的侦听器

Node.js 环境中的均匀处理也受此

暗示的支持

WebdriverJS inherits several function from the NodeJS EventEmitter object

如果您还想捕获网络流量,可以使用 browsermob-proxy

Here 是关于 browsermob-proxy 的教程

由于交互是通过 HTTP 进行的,因此我能够使用 - httflow 库捕获 HTTP 调用。 收到 HTTP 调用后,我清理了 HTTP 转储以删除不相关的调用,然后通过定义自定义映射将 Protractor 代码区域映射到调用。