Skip to content

Commit d72c923

Browse files
committed
MQE-751: Screenshot/source capture firing after failed hooks
- add auto screenshot logic to capture correct point of failure
1 parent 063909c commit d72c923

12 files changed

+71
-8
lines changed

dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ActionGroupWithDataOverrideTestCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/ActionGroupWithDataTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ActionGroupWithDataTestCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ActionGroupWithNoDefaultTestCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/ActionGroupWithPersistedData.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ActionGroupWithPersistedDataCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ActionGroupWithTopLevelPersistedDataCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ArgumentWithSameNameAsElementCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/BasicFunctionalTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class BasicFunctionalTestCest
4747
*/
4848
public function _failed(AcceptanceTester $I)
4949
{
50+
$I->saveScreenshot();
5051
$I->amOnPage("/afterUrl");
5152
}
5253

dev/tests/verification/Resources/MergeFunctionalTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class MergeFunctionalTestCest
4848
*/
4949
public function _failed(AcceptanceTester $I)
5050
{
51+
$I->saveScreenshot();
5152
$I->amOnPage("/afterUrl1");
5253
}
5354

dev/tests/verification/Resources/MergedActionGroupTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class MergedActionGroupTestCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

dev/tests/verification/Resources/MultipleActionGroupsTest.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class MultipleActionGroupsTestCest
5858
*/
5959
public function _failed(AcceptanceTester $I)
6060
{
61+
$I->saveScreenshot();
6162
$I->fillField("#foo", "myData1");
6263
$I->fillField("#bar", "myData2");
6364
}

src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php

+51-7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace Magento\FunctionalTestingFramework\Module;
88

9+
use Codeception\Events;
910
use Codeception\Module\WebDriver;
1011
use Codeception\Test\Descriptor;
1112
use Codeception\TestInterface;
@@ -21,6 +22,7 @@
2122
use Magento\FunctionalTestingFramework\Util\Protocol\CurlInterface;
2223
use Magento\Setup\Exception;
2324
use Magento\FunctionalTestingFramework\Util\ConfigSanitizerUtil;
25+
use Yandex\Allure\Adapter\Event\TestCaseFinishedEvent;
2426
use Yandex\Allure\Adapter\Support\AttachmentSupport;
2527

2628
/**
@@ -80,6 +82,27 @@ class MagentoWebDriver extends WebDriver
8082
LC_MESSAGES => null,
8183
];
8284

85+
/**
86+
* Current Test Interface
87+
*
88+
* @var TestInterface
89+
*/
90+
private $current_test;
91+
92+
/**
93+
* Png image filepath for current test
94+
*
95+
* @var string
96+
*/
97+
private $pngReport;
98+
99+
/**
100+
* Html filepath for current test
101+
*
102+
* @var string
103+
*/
104+
private $htmlReport;
105+
83106
public function _initialize()
84107
{
85108
$this->config = ConfigSanitizerUtil::sanitizeWebDriverConfig($this->config);
@@ -465,22 +488,43 @@ public function assertElementContainsAttribute($selector, $attribute, $value)
465488
}
466489
}
467490

491+
public function _before(TestInterface $test)
492+
{
493+
$this->current_test = $test;
494+
$this->htmlReport = null;
495+
$this->pngReport = null;
496+
497+
parent::_before($test);
498+
}
499+
468500
/**
469501
* Override for _failed method in Codeception method. Adds png and html attachments to allure report
470502
* following parent execution of test failure processing.
503+
*
471504
* @param TestInterface $test
472505
* @param \Exception $fail
473506
*/
474507
public function _failed(TestInterface $test, $fail)
475508
{
476-
parent::_failed($test, $fail);
509+
$this->debugWebDriverLogs($test);
510+
511+
if ($this->pngReport == null && $this->htmlReport == null) {
512+
$this->saveScreenshot();
513+
}
514+
515+
$this->addAttachment($this->pngReport, $test->getMetadata()->getName() . '.png', 'image/png');
516+
$this->addAttachment($this->htmlReport, $test->getMetadata()->getName() . '.html', 'text/html');
517+
}
477518

478-
// Reconstruct file naming from codeception method
519+
/**
520+
* Function which saves a screenshot of the current stat of the browser
521+
*/
522+
public function saveScreenshot()
523+
{
524+
$test = $this->current_test;
479525
$filename = preg_replace('~\W~', '.', Descriptor::getTestSignature($test));
480526
$outputDir = codecept_output_dir();
481-
$pngReport = $outputDir . mb_strcut($filename, 0, 245, 'utf-8') . '.fail.png';
482-
$htmlReport = $outputDir . mb_strcut($filename, 0, 244, 'utf-8') . '.fail.html';
483-
$this->addAttachment($pngReport, $test->getMetadata()->getName() . '.png', 'image/png');
484-
$this->addAttachment($htmlReport, $test->getMetadata()->getName() . '.html', 'text/html');
527+
$this->_saveScreenshot($this->pngReport = $outputDir . mb_strcut($filename, 0, 245, 'utf-8') . '.fail.png');
528+
$this->_savePageSource($this->htmlReport = $outputDir . mb_strcut($filename, 0, 244, 'utf-8') . '.fail.html');
485529
}
486-
}
530+
}

src/Magento/FunctionalTestingFramework/Test/Objects/TestHookObject.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace Magento\FunctionalTestingFramework\Test\Objects;
88

99
use Magento\FunctionalTestingFramework\Test\Util\ActionMergeUtil;
10+
use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor;
1011

1112
/**
1213
* Class TestHookObject
@@ -71,7 +72,15 @@ public function getType()
7172
public function getActions()
7273
{
7374
$mergeUtil = new ActionMergeUtil($this->parentName, $this->getType());
74-
return $mergeUtil->resolveActionSteps($this->actions);
75+
$mergedSteps = $mergeUtil->resolveActionSteps($this->actions);
76+
77+
// add explicit call to save screenshot in order to preserve state of application after failure
78+
if ($this->getType() == TestObjectExtractor::TEST_FAILED_HOOK) {
79+
$saveScreenshotStep = ["saveScreenshot" => new ActionObject("saveScreenshot", "saveScreenshot", [])];
80+
$mergedSteps = $saveScreenshotStep + $mergedSteps;
81+
}
82+
83+
return $mergedSteps;
7584
}
7685

7786
/**

0 commit comments

Comments
 (0)