Behat \ Mink: wait ($ timeout) не работает

php symfony phpunit mink

519 просмотра

2 ответа

Я использую Minkвместе с Zombie Driver для написания приемочных тестов. Сейчас я пытаюсь сделать ajax-вызов , поэтому я использую wait($timeout)метод для ожидания ответа, но он не работает. Я звоню как ожидание $this->session->wait(20000), но когда я рассчитал время с помощью функции php time(), было очевидно, что для завершения этого почти ничего не требуется, поэтому я предположил, что это неблокирующий вызов, и он будет блокироваться, если я попытаюсь получить доступ вещи $this->session->getPage(), но это тоже не так. Первоначально у меня было ($.active === 0)условие в качестве второго Аргумента wait(), но это не сработало, поэтому я удалил второй Аргумент, чтобы изолировать Проблему.
Нужно ли использовать spin()функцию, как в документации Беат , или этоwait()Функция достаточно. Если spin()нужно, то зачем wait()?

Обновить

Установив драйвер phantomjs для норки и увидев, что он работает, я должен сделать вывод, что проблема в драйвере зомби .

Автор: user2268997 Источник Размещён: 08.11.2019 11:06

Ответы (2)


0 плюса

Вы можете использовать wait () для условия JS, например:

wait(30000, "document.readyState === 'complete'")

Используйте спин для пользовательских ожиданий с функциями, как описано в документации.

Вот несколько других примеров того, как ajax может сделать вызов для ожидания вызова ajax.

Автор: lauda Размещён: 21.08.2016 08:55

0 плюса

Я нашел ту же проблему и нашел эту функцию в интернете, она отлично работает. Ссылка .

/**
 * Wait
 *
 * @param integer $time  * @param string  $condition
 *
 * @throws BehaviorException If timeout is reached
 */
 public function wait($time = 10000, $condition = null){
    if (!$this->getSession()->getDriver() instanceof Selenium2Driver) {
        return;
    }
    $start = microtime(true);
    $end = $start + $time / 1000.0;
    if ($condition === null) {
        $defaultCondition = true;
        $conditions = [
            "document.readyState == 'complete'",           // Page is ready
            "typeof $ != 'undefined'",                     // jQuery is loaded
            "!$.active",                                   // No ajax request is active
            "$('#page').css('display') == 'block'",        // Page is displayed (no progress bar)
            "$('.loading-mask').css('display') == 'none'", // Page is not loading (no black mask loading page)
            "$('.jstree-loading').length == 0",            // Jstree has finished loading
        ];
        $condition = implode(' && ', $conditions);
    } else {
        $defaultCondition = false;
    }
    // Make sure the AJAX calls are fired up before checking the condition
    $this->getSession()->wait(100, false);
    $this->getSession()->wait($time, $condition);
    // Check if we reached the timeout unless the condition is false to explicitly wait the specified time
    if ($condition !== false && microtime(true) > $end) {
        if ($defaultCondition) {
            foreach ($conditions as $condition) {
                $result = $this->getSession()->evaluateScript($condition);
                if (!$result) {
                    throw new BehaviorException(
                        sprintf(
                            'Timeout of %d reached when checking on "%s"',
                            $time,
                            $condition
                        )
                    );
                }
            }
        } else {
            throw new BehaviorException(sprintf('Timeout of %d reached when checking on %s', $time, $condition));
        }
    }
Автор: Lucas Karst Caminha Ruggiero Размещён: 14.02.2017 11:39
Вопросы из категории :
32x32