我正在使用public Observable<Post> transform(final PostResponse postResponse) {
return Observable.create(emitter -> {
final Post post = new Post(postResponse.getId());
post.setTitle(postResponse.getTitle());
post.setBody(postResponse.getBody());
userRepository.user(postResponse.getUserId()).doOnNext(user -> {
post.setUser(user);
emitter.onNext(post);
}).subscribe();
});
}
驱动程序在Docker容器中使用Behat / Mink测试我的Drupal站点。
使用Selenium Standalone-Chrome容器,我可以看到我的behat测试失败,但问题是,一旦它们失败,浏览器就会关闭,这使我很难看到问题所在。< / p>
我正在运行我的测试:
doOnNext
即使测试失败,有没有办法让远程控制的浏览器保持打开状态?
答案 0 :(得分:1)
默认情况下不可能。
也许你可以找到一些黑客去做,但不建议这样做,因为每个场景都应该是隔离的,至少在运行带有多个测试的套件时,这不是一个好的解决方案。
只有一次看看您是否可以使用printscreen
的逻辑并改为使用breakpoint
。
无论如何,你应该使用详细的(Behat 3的-vvv
)输出+ ide调试器来调试你的代码。
答案 1 :(得分:0)
最后,我找到了一个很好的解决方案:behat-fail-aid。
将故障辅助功能添加到FeatureContext中,然后使用--wait-on-failure
选项运行behat:
-wait-on-failure = {seconds}选项可用于 调查/检查浏览器中的故障。
答案 2 :(得分:0)
只要使用Behat钩子“ AfterStep”发生错误,就可以截取屏幕截图。 考虑看看Panther驱动程序或DChrome驱动程序。 这里是一个简短的示例,其中还考虑了非javascript测试(速度更快):
use Behat\Mink\Driver\Selenium2Driver;
/** Context Class Definition ... */
/**
* @AfterStep
*/
public function takeScreenShotAfterFailedStep(AfterStepScope $scope)
{
if (99 !== $scope->getTestResult()->getResultCode()) {
return;
}
$this->takeAScreenShot('error');
}
private function takeAScreenShot($prefix = 'screenshot')
{
$baseName= sprintf('PATH_FOR_YOUR_SCREENSHOTS/%s-%s', $prefix, (new \DateTime())->format('Y_m_d_H_i_s'));
if ($this->supportsJavascript()) {
$extension = '.png';
$content = $this->session->getScreenshot();
} else {
$extension = '.html';
$content = $this->getSession()->getPage()->getOuterHtml();
}
file_put_contents(sprintf('%s%s', $baseName, $extension), $content);
}
private function supportsJavascript()
{
return $this->getSession()->getDriver() instanceof Selenium2Driver;
}