2
2
3
3
namespace Group;
4
4
5
+ use Facebook\WebDriver\Remote\RemoteWebDriver;
5
6
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler;
6
7
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\CredentialStore;
8
+ use Magento\FunctionalTestingFramework\Module\MagentoWebDriver;
7
9
8
10
/**
9
11
* Group class is Codeception Extension which is allowed to handle to all internal events.
@@ -41,17 +43,15 @@ class functionalSuiteHooks extends \Codeception\GroupObject
41
43
if ($this->currentTestRun == 1) {
42
44
print sprintf(self::$HOOK_EXECUTION_INIT, "before");
43
45
46
+ /** @var MagentoWebDriver $webDriver */
47
+ $webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
48
+
44
49
try {
45
- $webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
46
-
47
- // close any open sessions
48
50
if ($webDriver->webDriver != null) {
49
- $webDriver->webDriver->close();
50
- $webDriver->webDriver = null;
51
+ $webDriver->_restart();
52
+ } else {
53
+ $webDriver->_initializeSession();
51
54
}
52
-
53
- // initialize the webdriver session
54
- $webDriver->_initializeSession();
55
55
$webDriver->amOnPage("some.url"); // stepKey: before
56
56
$createFields['someKey'] = "dataHere";
57
57
PersistedObjectHandler::getInstance()->createEntity(
@@ -64,16 +64,15 @@ class functionalSuiteHooks extends \Codeception\GroupObject
64
64
print("Entering Action Group [AC] actionGroupWithTwoArguments");
65
65
$webDriver->see("John", msq("uniqueData") . "John"); // stepKey: seeFirstNameAC
66
66
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
-
73
67
} catch (\Exception $exception) {
74
68
$this->preconditionFailure = $exception->getMessage();
75
69
}
76
70
71
+ // reset configuration and close session
72
+ $webDriver->_resetConfig();
73
+ $webDriver->webDriver->close();
74
+ $webDriver->webDriver = null;
75
+
77
76
print sprintf(self::$HOOK_EXECUTION_END, "before");
78
77
}
79
78
}
@@ -89,6 +88,9 @@ class functionalSuiteHooks extends \Codeception\GroupObject
89
88
if ($this->currentTestRun == $this->testCount) {
90
89
print sprintf(self::$HOOK_EXECUTION_INIT, "after");
91
90
91
+ /** @var MagentoWebDriver $webDriver */
92
+ $webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
93
+
92
94
try {
93
95
// Find out if Test in Suite failed, will cause potential failures in suite after
94
96
$cest = $e->getTest();
@@ -111,16 +113,11 @@ class functionalSuiteHooks extends \Codeception\GroupObject
111
113
}
112
114
}
113
115
}
114
- $webDriver = $this->getModule('\Magento\FunctionalTestingFramework\Module\MagentoWebDriver');
115
-
116
- // close any open sessions
117
116
if ($webDriver->webDriver != null) {
118
- $webDriver->webDriver->close();
119
- $webDriver->webDriver = null;
117
+ $webDriver->_restart();
118
+ } else {
119
+ $webDriver->_initializeSession();
120
120
}
121
-
122
- // initialize the webdriver session
123
- $webDriver->_initializeSession();
124
121
$webDriver->amOnPage("some.url"); // stepKey: after
125
122
$webDriver->deleteEntityByUrl("deleteThis"); // stepKey: delete
126
123
print("Entering Action Group [AC] actionGroupWithTwoArguments");
@@ -131,7 +128,37 @@ class functionalSuiteHooks extends \Codeception\GroupObject
131
128
}
132
129
133
130
PersistedObjectHandler::getInstance()->clearSuiteObjects();
131
+
132
+ $this->closeSession($webDriver);
133
+
134
134
print sprintf(self::$HOOK_EXECUTION_END, "after");
135
135
}
136
136
}
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
+ }
137
164
}
0 commit comments