Laravel Dusk удаляет входные значения после подтверждения формы - PullRequest
2 голосов
/ 07 июня 2019

Я использую Laravel Dusk для тестирования браузера.Я все еще плохо знаком с этим и изучаю, как это работает.Я использую много JavaScript, чтобы помочь сделать то, что мне нужно.

У меня есть форма на модале, которую нужно заполнить, что я смог сделать с помощью JS.Однако проверка завершается неудачно, потому что, когда Dusk нажимает кнопку для отправки поля, он сначала очищает входные данные, совершая ошибки при броске формы и, следовательно, не проходит проверку.

Я попытался найти другие, которые имеют такое жепроблема, но я не могу найти других.Я ничего не пробовал, потому что нет никаких признаков того, откуда возникла проблема.

$browser->script('document.querySelector("#body-nav > div:nth-child(1) > select").selectedIndex=1');
            $browser->pause(5000);

            $insertJobTitle = <<<js
            document.querySelector("#body-nav > div:nth-child(2) > input").value="{$jobTitle}"
js;
            $browser->script($insertJobTitle);
            $browser->pause(1000);

            $insertDateTime = <<<js
            document.querySelector("#body-nav > div:nth-child(3) > input").value="2019-07-25"
js;
            $browser->script($insertDateTime);
            $browser->pause(1000);

            $insertEstimatedTimeToFill = <<<js
            document.querySelector("#body-nav > div:nth-child(4) > div:nth-child(1) > input").value={$numberHigh}
js;
            $browser->script($insertEstimatedTimeToFill);
            $browser->pause(1000);

            $insertNumberOfPositions = <<<js
            document.querySelector("#body-nav > div:nth-child(4) > div:nth-child(2) > input").value={$numberLow}
js;
            $browser->script($insertNumberOfPositions);
            $browser->pause(1000);

            $browser->script('document.querySelector("#body-nav > div:nth-child(5) > div:nth-child(1) > input").value=500');
            $browser->pause(1000);
            $browser->script('document.querySelector("#body-nav > div:nth-child(5) > div:nth-child(2) > input").value=200');
            $browser->pause(1000);
            $browser->script('document.querySelector("body > div.modal.fade.show > div > div > div.modal-footer > div > div > button.btn.btn-primary").click()'); //******** */
            $browser->pause(50000);

Ожидаемый результат - Dusk отправит форму.Сообщение об ошибке - это ошибка JavaScript, говорящая javascript error: Cannot read property 'click' of null, которая вызвана тайм-аутом формы после ошибки во входных данных.

1 Ответ

0 голосов
/ 12 июня 2019

Итак, как оказалось, мне не нужен был JavaScript, как я думал.То, что происходило, я пытался использовать JS для вставки текста в элемент HTML, который на самом деле был компонентом Vue.Когда я нажму кнопку отправки, он не распознает значения.

Проблема была в том, что я пытался вставить данные на модал.Мне было трудно использовать селекторы с модалом.В итоге я использовал эту структуру:

$browser->whenAvailable('body > div.modal.zoomin.show > div > div > div.modal-body', function($modal){
                $modal->click('body > div.modal.zoomin.show > div > div > div.modal-footer > div > div > label.ml-auto.mb-0.vue-js-switch > div');
                $modal->press('body > div.modal.zoomin.show > div');
            });

Решение: когда вы обращаетесь к элементам в модальном режиме, вам нужно использовать метод whenAvailable, который затем принимает функцию, в которой вы будете ссылаться на селекторыпредметы в модале, но только после того, как модал доступен.

...