Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как правильно использовать и вызывать helper функцию из WebHelper?


(Marija Plotņikova) #1

Codeception 1.8
Добавляю в _helpers/WebHelper кастомную функцию, но не понимаю, как ее правильно вызвать:

<?php
namespace Codeception\Module;

// here you can define custom functions for WebGuy 

class WebHelper extends \Codeception\Module {
    
    public function fillAndCheckAutocomplete(WebGuy $I, $field, $value = NULL, $checkValues = true){...


    

Codeception\Module\WebHelper::fillAndCheckAutocomplete($I, $departureField, $departure);

(Ray Romanov) #2

Ничего не понятно, ошибку полностью плиз, и зачем WebGuy $I передаешь?


(Marija Plotņikova) #3

Упс, поняла, что не в то место добавляю функцию :slight_smile: Тогда вопрос - где их правильно хранить и как потом вызывать в тестах?


(Ray Romanov) #4

У меня функции расширяющие возможности хранятся в WebHelper , а часто используемые шаги в _steps.

Пример хелпера:

    <?php
    namespace Codeception\Module;
    
    class WebHelper extends \Codeception\Module
    {
        /**
        * waitForAjax : wait for all ajax request to close
        * @param  integer $timeout  timeout in seconds
        * @param  integer $interval interval in miliseconds
        * @return void            
        */
        public function waitForAjax($timeout = 15, $interval = 200)
        {
    		$driv = $this->getModule('WebDriver')->webDriver;
    		$driv->wait($timeout, $interval)->until(function($driv) {
                // jQuery: "jQuery.active" or $.active
                // Prototype: "Ajax.activeRequestCount"
                // Dojo: "dojo.io.XMLHTTPTransport.inFlight.length"
                $condition = 'return ((jQuery.active == 0) && (Ajax.activeRequestCount == 0));';
                return $driv->executeScript($condition);});
        }
}

В тесте вызывается просто

$I->waitForAjax();