22
33namespace Group;
44
5+ use Facebook\WebDriver\Remote\RemoteWebDriver;
56use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler;
67use 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}
0 commit comments