Я пытаюсь выполнить запрос AJAX в браузере в Codeception. Есть функция
$I->executeAsyncJS();
Ручная https://codeception.com/docs/modules/WebDriver#executeAsyncJS
Я пытаюсь понять руководство. Там написано:
Выполняется асинхронно JavaScript. Обратный вызов должен быть выполнен JavaScript для выхода из скрипта. Обратный вызов передается как последний элемент в массиве arguments. Дополнительные аргументы могут быть переданы в виде массива во втором параметре.
Я просто не понимаю, что это говорит. Вот что у меня есть:
JS на странице:
const Done = {};
Done.result = function(){
return "Happy";
}
Codeception Selenium WebDriver Chrome Тест:
<?php
class SEQuestionCest
{
public function itShouldReturnJoy(\AcceptanceTester $I){
$I->amOnPage("/page.php");
$happy = $I->executeJS("return Done.result();");
$I->assertEquals($happy, "Happy"); //This works
$happy = $I->executeAsyncJS("setTimeout(function() { return Done.result(); }, 2000);"); //I'm doing something wrong
$I->assertEquals($happy, "Happy");
}
}
Результат:
Я ожидал, что он вернется через 2 секунды, но вместо этого он просто отключится через 20 секунд. Я думал, что функция тайм-аута будет имитировать вызов AJAX. Я делаю что-то очень неправильно, очевидно.