在Protractor中监听浏览器事件

时间:2014-09-24 16:41:57

标签: javascript selenium-webdriver protractor addeventlistener

有没有办法在Protractor测试中将事件监听器附加到浏览器事件?

我知道Protractor是作为Node程序运行的,但是我很好奇是否有人使用像browserevent这样的Node包来完成这项工作。

如果有的话,寻找任何例子。

2 个答案:

答案 0 :(得分:1)

在我看来,在量角器精神中,不,这是不可能的。量角器是一层硒webdriver。 Webdriver是一种JSON协议,它发送命令与浏览器进行通信。这些命令存储在promises队列中,然后返回异步到Protractor。然后你可以使用jasmine的“Expect”关键字来执行Assertion来检查DOM。

如果你仍然需要找到一种方法,你可以试试黑客的方式:

browser.driver.executeScript(“你的JAVASCRIPT CODE HERE;”);

然后你在browser.wait()中包装这个调用,但我不建议这样。

谢谢

答案 1 :(得分:0)

我知道这是一个古老的问题,但是我只想在这里添加一些信息,也许当问这个问题时它不存在。似乎有疑问和评论说,这是针对webdriverjs的webdriver的Javascript实现。 ProtractorWebdriverjs的包装,因此在这里应该是有效的。

您应该能够使用addEventListener命令添加任何受浏览器支持的events

请注意,当前仅支持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