MOBILE-4110 behat: Fix JS calls
parent
aa7cf575e3
commit
4632eeb932
|
@ -565,7 +565,7 @@ class behat_app extends behat_app_helper {
|
||||||
*/
|
*/
|
||||||
public function i_pull_to_refresh_in_the_app() {
|
public function i_pull_to_refresh_in_the_app() {
|
||||||
$this->spin(function() {
|
$this->spin(function() {
|
||||||
$result = $this->js('await window.behat.pullToRefresh();');
|
$result = $this->runtime_js('pullToRefresh()');
|
||||||
|
|
||||||
if ($result !== 'OK') {
|
if ($result !== 'OK') {
|
||||||
throw new DriverException('Error pulling to refresh - ' . $result);
|
throw new DriverException('Error pulling to refresh - ' . $result);
|
||||||
|
@ -824,7 +824,7 @@ class behat_app extends behat_app_helper {
|
||||||
$this->getSession()->switchToWindow($names[1]);
|
$this->getSession()->switchToWindow($names[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->js('window.close()');
|
$this->evaluate_script('window.close()');
|
||||||
$this->getSession()->switchToWindow($names[0]);
|
$this->getSession()->switchToWindow($names[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -433,51 +433,6 @@ class behat_app_helper extends behat_base {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Evaluate and execute scripts checking for promises if needed.
|
|
||||||
*
|
|
||||||
* @param string $script
|
|
||||||
* @return mixed Resolved promise result.
|
|
||||||
*/
|
|
||||||
protected function js(string $script) {
|
|
||||||
$scriptnoreturn = preg_replace('/^return\s+/', '', $script);
|
|
||||||
$scriptnoreturn = preg_replace('/;$/', '', $scriptnoreturn);
|
|
||||||
|
|
||||||
if (!preg_match('/^await\s+/', $scriptnoreturn)) {
|
|
||||||
// No async.
|
|
||||||
return $this->evaluate_script($script);
|
|
||||||
}
|
|
||||||
|
|
||||||
$script = preg_replace('/^await\s+/', '', $scriptnoreturn);
|
|
||||||
|
|
||||||
$start = microtime(true);
|
|
||||||
$promisevariable = 'PROMISE_RESULT_' . time();
|
|
||||||
$timeout = self::get_extended_timeout();
|
|
||||||
|
|
||||||
$res = $this->evaluate_script("Promise.resolve($script)
|
|
||||||
.then(result => window.$promisevariable = result)
|
|
||||||
.catch(error => window.$promisevariable = 'Async code rejected: ' + error?.message)");
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (microtime(true) - $start > $timeout) {
|
|
||||||
throw new DriverException("Async script not resolved after $timeout seconds");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 0.1 seconds.
|
|
||||||
usleep(100000);
|
|
||||||
} while (!$this->evaluate_script("'$promisevariable' in window"));
|
|
||||||
|
|
||||||
$result = $this->evaluate_script("window.$promisevariable");
|
|
||||||
|
|
||||||
$this->evaluate_script("delete window.$promisevariable");
|
|
||||||
|
|
||||||
if (is_string($result) && strrpos($result, 'Async code rejected:') === 0) {
|
|
||||||
throw new DriverException($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Evaluate and execute methods from the Behat runtime.
|
* Evaluate and execute methods from the Behat runtime.
|
||||||
*
|
*
|
||||||
|
@ -485,7 +440,7 @@ class behat_app_helper extends behat_base {
|
||||||
* @return mixed Result.
|
* @return mixed Result.
|
||||||
*/
|
*/
|
||||||
protected function runtime_js(string $script) {
|
protected function runtime_js(string $script) {
|
||||||
return $this->js("window.behat.$script");
|
return $this->evaluate_script("window.behat.$script");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue