Skip to content

Commit 5079cca

Browse files
committed
MQE-2162: Chrome remains running after MFTF suite finishes
- verification test fix
1 parent 1e37e95 commit 5079cca

File tree

2 files changed

+98
-44
lines changed

2 files changed

+98
-44
lines changed

Diff for: dev/tests/verification/Resources/functionalSuiteHooks.txt

+49-22
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
namespace Group;
44

5+
use Facebook\WebDriver\Remote\RemoteWebDriver;
56
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler;
67
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\CredentialStore;
8+
use Magento\FunctionalTestingFramework\Module\MagentoWebDriver;
79

810
/**
911
* Group class is Codeception Extension which is allowed to handle to all internal events.
@@ -41,17 +43,15 @@ class functionalSuiteHooks extends \Codeception\GroupObject
4143
if ($this->currentTestRun == 1) {
4244
print sprintf(self::$HOOK_EXECUTION_INIT, "before");
4345

46+
/** @var MagentoWebDriver $webDriver */
47+
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
48+
4449
try {
45-
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
46-
47-
// close any open sessions
4850
if ($webDriver->webDriver != null) {
49-
$webDriver->webDriver->close();
50-
$webDriver->webDriver = null;
51+
$webDriver->_restart();
52+
} else {
53+
$webDriver->_initializeSession();
5154
}
52-
53-
// initialize the webdriver session
54-
$webDriver->_initializeSession();
5555
$webDriver->amOnPage("some.url"); // stepKey: before
5656
$createFields['someKey'] = "dataHere";
5757
PersistedObjectHandler::getInstance()->createEntity(
@@ -64,16 +64,15 @@ class functionalSuiteHooks extends \Codeception\GroupObject
6464
print("Entering Action Group [AC] actionGroupWithTwoArguments");
6565
$webDriver->see("John", msq("uniqueData") . "John"); // stepKey: seeFirstNameAC
6666
print("Exiting Action Group [AC] actionGroupWithTwoArguments");
67-
68-
// reset configuration and close session
69-
$this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver')->_resetConfig();
70-
$webDriver->webDriver->close();
71-
$webDriver->webDriver = null;
72-
7367
} catch (\Exception $exception) {
7468
$this->preconditionFailure = $exception->getMessage();
7569
}
7670

71+
// reset configuration and close session
72+
$webDriver->_resetConfig();
73+
$webDriver->webDriver->close();
74+
$webDriver->webDriver = null;
75+
7776
print sprintf(self::$HOOK_EXECUTION_END, "before");
7877
}
7978
}
@@ -89,6 +88,9 @@ class functionalSuiteHooks extends \Codeception\GroupObject
8988
if ($this->currentTestRun == $this->testCount) {
9089
print sprintf(self::$HOOK_EXECUTION_INIT, "after");
9190

91+
/** @var MagentoWebDriver $webDriver */
92+
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
93+
9294
try {
9395
// Find out if Test in Suite failed, will cause potential failures in suite after
9496
$cest = $e->getTest();
@@ -111,16 +113,11 @@ class functionalSuiteHooks extends \Codeception\GroupObject
111113
}
112114
}
113115
}
114-
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
115-
116-
// close any open sessions
117116
if ($webDriver->webDriver != null) {
118-
$webDriver->webDriver->close();
119-
$webDriver->webDriver = null;
117+
$webDriver->_restart();
118+
} else {
119+
$webDriver->_initializeSession();
120120
}
121-
122-
// initialize the webdriver session
123-
$webDriver->_initializeSession();
124121
$webDriver->amOnPage("some.url"); // stepKey: after
125122
$webDriver->deleteEntityByUrl("deleteThis"); // stepKey: delete
126123
print("Entering Action Group [AC] actionGroupWithTwoArguments");
@@ -131,7 +128,37 @@ class functionalSuiteHooks extends \Codeception\GroupObject
131128
}
132129

133130
PersistedObjectHandler::getInstance()->clearSuiteObjects();
131+
132+
$this->closeSession($webDriver);
133+
134134
print sprintf(self::$HOOK_EXECUTION_END, "after");
135135
}
136136
}
137+
138+
/**
139+
* Close session method closes current session.
140+
* If config 'close_all_sessions' is set to 'true' all sessions will be closed.
141+
*
142+
* @param MagentoWebDriver $webDriver
143+
* return void
144+
*/
145+
private function closeSession(MagentoWebDriver $webDriver): void
146+
{
147+
$webDriverConfig = $webDriver->_getConfig();
148+
$webDriver->_closeSession();
149+
if (isset($webDriverConfig['close_all_sessions']) && $webDriverConfig['close_all_sessions'] === "true") {
150+
$wdHost = sprintf(
151+
'%s://%s:%s%s',
152+
$webDriverConfig['protocol'],
153+
$webDriverConfig['host'],
154+
$webDriverConfig['port'],
155+
$webDriverConfig['path']
156+
);
157+
$availableSessions = RemoteWebDriver::getAllSessions($wdHost);
158+
foreach ($availableSessions as $session) {
159+
$remoteWebDriver = RemoteWebDriver::createBySessionID($session['id'], $wdHost);
160+
$remoteWebDriver->quit();
161+
}
162+
}
163+
}
137164
}

Diff for: dev/tests/verification/Resources/functionalSuiteWithComments.txt

+49-22
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
namespace Group;
44

5+
use Facebook\WebDriver\Remote\RemoteWebDriver;
56
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler;
67
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\CredentialStore;
8+
use Magento\FunctionalTestingFramework\Module\MagentoWebDriver;
79

810
/**
911
* Group class is Codeception Extension which is allowed to handle to all internal events.
@@ -41,17 +43,15 @@ class functionalSuiteWithComments extends \Codeception\GroupObject
4143
if ($this->currentTestRun == 1) {
4244
print sprintf(self::$HOOK_EXECUTION_INIT, "before");
4345

46+
/** @var MagentoWebDriver $webDriver */
47+
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
48+
4449
try {
45-
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
46-
47-
// close any open sessions
4850
if ($webDriver->webDriver != null) {
49-
$webDriver->webDriver->close();
50-
$webDriver->webDriver = null;
51+
$webDriver->_restart();
52+
} else {
53+
$webDriver->_initializeSession();
5154
}
52-
53-
// initialize the webdriver session
54-
$webDriver->_initializeSession();
5555
print("Comment in Before");
5656
$webDriver->amOnPage("some.url"); // stepKey: before
5757
$createFields['someKey'] = "dataHere";
@@ -66,16 +66,15 @@ class functionalSuiteWithComments extends \Codeception\GroupObject
6666
print("Entering Action Group [AC] actionGroupWithTwoArguments");
6767
$webDriver->see("John", msq("uniqueData") . "John"); // stepKey: seeFirstNameAC
6868
print("Exiting Action Group [AC] actionGroupWithTwoArguments");
69-
70-
// reset configuration and close session
71-
$this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver')->_resetConfig();
72-
$webDriver->webDriver->close();
73-
$webDriver->webDriver = null;
74-
7569
} catch (\Exception $exception) {
7670
$this->preconditionFailure = $exception->getMessage();
7771
}
7872

73+
// reset configuration and close session
74+
$webDriver->_resetConfig();
75+
$webDriver->webDriver->close();
76+
$webDriver->webDriver = null;
77+
7978
print sprintf(self::$HOOK_EXECUTION_END, "before");
8079
}
8180
}
@@ -91,6 +90,9 @@ class functionalSuiteWithComments extends \Codeception\GroupObject
9190
if ($this->currentTestRun == $this->testCount) {
9291
print sprintf(self::$HOOK_EXECUTION_INIT, "after");
9392

93+
/** @var MagentoWebDriver $webDriver */
94+
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
95+
9496
try {
9597
// Find out if Test in Suite failed, will cause potential failures in suite after
9698
$cest = $e->getTest();
@@ -113,23 +115,48 @@ class functionalSuiteWithComments extends \Codeception\GroupObject
113115
}
114116
}
115117
}
116-
$webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
117-
118-
// close any open sessions
119118
if ($webDriver->webDriver != null) {
120-
$webDriver->webDriver->close();
121-
$webDriver->webDriver = null;
119+
$webDriver->_restart();
120+
} else {
121+
$webDriver->_initializeSession();
122122
}
123-
124-
// initialize the webdriver session
125-
$webDriver->_initializeSession();
126123
print("afterBlock");
127124
} catch (\Exception $exception) {
128125
print $exception->getMessage();
129126
}
130127

131128
PersistedObjectHandler::getInstance()->clearSuiteObjects();
129+
130+
$this->closeSession($webDriver);
131+
132132
print sprintf(self::$HOOK_EXECUTION_END, "after");
133133
}
134134
}
135+
136+
/**
137+
* Close session method closes current session.
138+
* If config 'close_all_sessions' is set to 'true' all sessions will be closed.
139+
*
140+
* @param MagentoWebDriver $webDriver
141+
* return void
142+
*/
143+
private function closeSession(MagentoWebDriver $webDriver): void
144+
{
145+
$webDriverConfig = $webDriver->_getConfig();
146+
$webDriver->_closeSession();
147+
if (isset($webDriverConfig['close_all_sessions']) && $webDriverConfig['close_all_sessions'] === "true") {
148+
$wdHost = sprintf(
149+
'%s://%s:%s%s',
150+
$webDriverConfig['protocol'],
151+
$webDriverConfig['host'],
152+
$webDriverConfig['port'],
153+
$webDriverConfig['path']
154+
);
155+
$availableSessions = RemoteWebDriver::getAllSessions($wdHost);
156+
foreach ($availableSessions as $session) {
157+
$remoteWebDriver = RemoteWebDriver::createBySessionID($session['id'], $wdHost);
158+
$remoteWebDriver->quit();
159+
}
160+
}
161+
}
135162
}

0 commit comments

Comments
 (0)