9 use Codeception\Exception\ModuleRequireException;
10 use Codeception\Module\WebDriver;
12 use Facebook\WebDriver\Exception\UnexpectedAlertOpenException;
84 $reflector = new \ReflectionMethod($this,
'clearFailureOnPage');
85 if ($reflector->getDeclaringClass()->getName() === get_class($this)) {
88 $this->resetFailureThreshold = -1;
128 $clazz = get_class($this);
129 $namespaceBreak = strrpos($clazz,
'\\');
130 if ($namespaceBreak !==
false) {
131 $clazz = substr($clazz, $namespaceBreak + 1);
149 $this->
setTracker($this->getCurrentValue(), 0);
169 }
catch (UnexpectedAlertOpenException $exception) {
171 'An alert is open, bypassing javascript-based metric check',
172 [
'step' => $step->__toString()]
188 $this->
errorLog(
'Failed readiness check', [
'step' => $step->__toString()]);
190 if ($this->resetFailureThreshold >= 0 &&
$failCount >= $this->resetFailureThreshold) {
192 'Too many failures, assuming metric is stuck and resetting state',
193 [
'step' => $step->__toString()]
195 $this->resetMetric();
208 return $this->extension->getDriver();
221 return $this->extension->getDriver()->executeJS($script,
$arguments);
232 private function getCurrentValue($refresh =
false)
235 unset($this->currentValue);
237 if (!isset($this->currentValue)) {
250 return $this->storedValue ??
null;
270 private function resetMetric()
285 unset($this->currentValue);
286 $this->storedValue =
$value;
297 unset($this->currentValue);
298 unset($this->storedValue);
299 $this->failCount = 0;
312 $context = array_merge($this->getLogContext(), $context);
327 $context = array_merge($this->getLogContext(), $context);
342 if ($this->verbose) {
343 $context = array_merge($this->getLogContext(), $context);
355 private function getLogContext()
358 'test' => $this->extension->getTestName(),
359 'uri' => $this->extension->getUri(),
errorLog($message, $context=[])
setTracker($value, $failCount)
infoLog($message, $context=[])
__construct($extension, $resetFailureThreshold)
executeJs($script, $arguments=[])
debugLog($message, $context=[])