Laravel Dusk - NoSuchElementException: нет такого элемента: невозможно найти элемент - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь проверить свою форму входа в сумерках. На интерфейсе я использую компонент vue. Когда я пытаюсь получить доступ к вводу электронной почты и установить значение, я получаю сообщение об ошибке:

1) Tests\Browser\LoginTest::testExample
Facebook\WebDriver\Exception\NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"body [dusk="login-email"]"}
  (Session info: headless chrome=84.0.4147.105)

Форма входа:

<form @submit.prevent="submitForm" class="q-mt-lg">
        <div class="col q-mb-md">
          <q-input
            v-model="formData.email"
            outlined
            type="email"
            dusk="login-email"
            class="col"
            data-email
            label="Email"
            ref="email"
            stack-label
            :rules="[ val => validateEmail(val) || 'Please enter a valid email address']"
            lazy-rules />
        </div>
        <div class="col q-mb-md">
          <q-input
            v-model="formData.password"
            type="password"
            dusk="login-password"
            outlined
            class="col"
            label="Password"
            ref="password"
            stack-label
            :rules="[ val => val.length >= 8 || 'Password must be at least 8 characters']"
            lazy-rules />
        </div>
        <div class="row">
            <q-btn
            type="submit"
            dusk="login-btn"
            name="login"
            class="login"
            color="primary"
            label="Login" />
        </div>
    </form>

Мой тест :

<?php

namespace Tests\Browser;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\User;

class LoginTest extends DuskTestCase
{
    /**
     * A Dusk test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->browse(function ($browser) {
            $browser->visit('/login')
                    ->type('@login-email', 'test@test.com')
                    ->type('@login-password', '12345678')
                    ->press('@login-btn')
                    ->assertPathIs('/');
        });
    }
}

Мой проект работает на http://localhost: 3002

В файле .env - APP_URL = http://localhost

В DuskTestCase. php

protected function driver()
    {
        $options = (new ChromeOptions)->addArguments([
            '--disable-gpu',
            '--headless',
            '--window-size=1920,1080',
            '--no-sandbox'
        ]);

        return RemoteWebDriver::create(
            'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
                ChromeOptions::CAPABILITY, $options
            )
        );
    }

Если я изменю APP_URL на http://localhost: 3002, ошибка будет такой же. Вы можете мне помочь с этим вопросом? Спасибо!

1 Ответ

0 голосов
/ 07 августа 2020

У меня была такая же проблема с Dusk. И многое, многое другое.

Есть несколько вещей, которые вы можете сделать, чтобы исправить эту ошибку, но может быть сложно найти подходящее исправление для вашей конкретной сборки.

  • Обновите Chrome до последней версии
  • Обновите Chrome WebDriver
  • Тот, который получил меня несколько раз: убедитесь, что переменная APP_URL в вашем файле .env . Убедитесь, что это правильный URL-адрес, на котором запущено живое приложение. IE параметр должен соответствовать действительности.
  • Попробуйте не передавать селектор css в метод типа. Согласно Dusk Docs , вам не нужно этого делать - Dusk попытается найти поле с заданным атрибутом имени. css может вызывать больше проблем, чем его ценность

Так, например:

$browser->visit('/login')
    ->type('login-email', 'test@test.com')
    ->type('login-password', '12345678')
    ->press('login-btn')
    ->assertPathIs('/');
...