0

关于实习生工作流程,如果出现异常,我的问题有两个部分:

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

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

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'
4

2 回答 2

1

要自己获取屏幕截图,您可以调用remote.takeScreenshot().then(function (base64Png) {}),但据我所知,无法检索自动生成的屏幕截图 - WebDriver JsonWireProtocol中似乎没有任何方法可以这样做。

要检索日志,您可以调用remote.log(typeOfLog).then(function (logs) {}). 请参阅日志中的 JsonWireProtocol 以获取有关您返回的更多信息。

于 2014-02-21T22:31:34.710 回答
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
    });
}
于 2014-04-03T03:31:43.607 回答