Сумерки: цикл по классу входов не может вводить текст с помощью sendKeys

Я не могу ввести текст в определенное поле ввода, как это определено атрибутом данных. Могут быть десятки входных данных с одним и тем же классом, поэтому я бы предпочел не добавлять dusk='xxxx' по всей странице.

Для эффективности маршрутизации и серверной стороны функция AJAX извлекает тип из массива входных данных и маршрутов к функции, которая разветвляет действие.

Код блейда:

{!! Form::text('question[]', null, 
         ['class'=>'form-control actionChange', "data-id"=>$question->id, "data-type"=>'question']) !!}

Страница начинается с других вопросов другого типа, поэтому я попытался использовать nth-child(x) для захвата селектора в модальном окне, но безуспешно. Я также пытался использовать $browser->script().

Читая несколько похожих вопросов, таких как этот, кажется что цикл внутри модального окна, вероятно, лучший способ. Этот метод правильно присваивает селектор переменной цикла $input. Это правильные данные clear()s, и я тестировал аналогичный код с click(), и он успешно работает. Однако он не вводит данные во входные данные. type() и keys(), похоже, не работают с RemoteWebElement, поэтому я считаю, что мой единственный выбор для ввода данных - sendKeys().

Тестовый код в сумерках:

$browser->assertPathIs('/notice')
        ->whenAvailable('.modal', function($modal) use($browser) {
           $modal->assertSee('Survey for:')
             ->waitFor('#heading')
             // WORKS fine
             ->keys('#heading', 'Edited Heading for Survey', '{enter}')
             ->waitFor('.actionSurvey');

                // Edit a question -- NOT WORKING
                foreach ($browser->elements('.actionChange') as $input) {
                    $dataType = $input->getAttribute('data-type');
                    if($dataType === 'question') {
                        $input->clear()  // WORKS Fine 
                            ->sendKeys('Edited_Question') // NOT successful
                        break;

Я пробовал с методом clear() и без него, а также с различными селекторами как внутри, так и вне модального цикла. То же самое для script() Кроме того, я попытался использовать переменную $modal для получения элементов, но это было просто предположение, так как я немного не понимаю на данный момент.

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


person Watercayman    schedule 06.12.2019    source источник
comment
@Watercaymen Вы пытались найти элемент напрямую, используя базовый драйвер $browser-›driver-›findElement(WebDriverBy::cssSelector('input[data-id=3]')) ?   -  person Tushar    schedule 09.12.2019
comment
@Tushar: большое спасибо за ответ. Ваш код правильно находит элемент, как это делает цикл выше (хотя ваш код более эффективен). Однако я получаю тот же результат - он может очистить ввод, но не будет отправлять ключи на модальный ввод.   -  person Watercayman    schedule 09.12.2019
comment
@Watercaymen Трудно отладить это, не глядя на экран, над которым вы работаете. Один из способов отладки — поместить $browser-›tinker() сразу после метода clear(). И тогда вы можете попробовать разные методы в терминале, что работает, а что нет.   -  person Tushar    schedule 10.12.2019
comment
@Тушар. ВОТ ЭТО ДА! Это абсолютно блестяще. Я не знал, что вы можете сделать это, но это очень полезно. Большое спасибо. Я смог использовать tinker, используя ваш код, но я получаю те же результаты. Я начинаю думать, что это может быть проблема с сумраком / селеном, поскольку я могу clear(), но ничто не позволяет отправлять ключи в модальном режиме, даже если дескриптор правильный.   -  person Watercayman    schedule 11.12.2019
comment
Попробуйте обновить версию драйвера Chrome, если у вас не последняя версия. Однажды у меня была эта сумасшедшая проблема с драйвером, который не переключался на iFrame, и обновление хромированного драйвера исправило это.   -  person Tushar    schedule 11.12.2019