在Intern中从网格中检索selenium日志和屏幕截图

时间:2014-02-21 22:04:37

标签: json selenium intern

在异常的情况下,关于实习生工作流程,我的问题分为两部分:

1- Per Selenium Desired Capabilities规范,RemoteWebDriver默认捕获异常的screents(除非通过设置webdriever.remote.quiteExceptions禁用它。)是否可以在Intern中检索这些屏幕截图?

2-我已经建立了一个具有多个平台/浏览器的Selenium Grid,可以成功地在网格上执行Intern测试。但是我试图在我的Intern环境中收集日志,这样我就不必登录网格上的每台机器来查看日志。我对基于selenium logging指南的服务器,驱动程序和浏览器日志特别感兴趣。我尝试使用Selenium Desired Capabilities指南添加以下Intern配置,但无法获取任何日志:

capabilities: {
'selenium-version': '2.39.0',
'driver': 'ALL',
'webdriver.log.driver':'INFO',
'webdriver.chrome.logfile': 'C:\\intern\\logs \\chromedriver.log',
'webdriver.firefox.logfile':'C:\\intern \\logs\\firefox.log'

2 个答案:

答案 0 :(得分:1)

要自己获取屏幕截图,您可以拨打remote.takeScreenshot().then(function (base64Png) {}),但我无法检索自动生成的屏幕截图 - WebDriver JsonWireProtocol中似乎没有任何内容可以执行此操作。

要检索日志,您可以致电remote.log(typeOfLog).then(function (logs) {})。有关您的回复信息,请参阅JsonWireProtocol on log

答案 1 :(得分:0)

有一种方法可以捕获自动生成的屏幕截图。使用自定义报告器(https://github.com/theintern/intern/wiki/Using-and-Writing-Reporters#custom-reporters),我能够保存屏幕截图并将浏览器控制台日志记录到文件中。

如上面的链接所述,当调用'/ test / fail'主题回调时,它会传入一个测试对象。如果webdriver在内部失败,则此对象将包含一个'test.error.cause.value.screen'变量。这是存储webdriver生成的屏幕截图的变量。以下是我的所作所为:

if (test.error.cause.value.screen) {
    //Store this variable into a file using node's fs library
}

如果查看错误对象,您还可以看到webdriver记录的更多错误信息。

关于浏览器日志,@ C Snover已经确定了那个。但该信息仅在远程对象内可用。调用'/ session / start'主题回调时,此对象可用。所以我做的是创建了一个映射,将会话ID从远程对象映射到远程对象本身。幸运的是,测试对象也有会话ID。因此,我使用test.sessionId作为地图的关键字从地图中检索了远程对象,并记录了浏览器日志。所以简而言之,这就是我所做的:

'/session/start': function (remote) {
    sessions[remote.sessionId] = { remote: remote };
},

'/test/fail': function (test) {
    var remote = sessions[test.sessionId].remote;
    remote._wd.log('browser', function (err, logs) {
        //Store the logs array into a file using node's fs library
    });
}