【问题标题】:Laravel Dusk NoSuchElementException / Unable to locate elementLaravel Dusk NoSuchElementException / 无法定位元素
【发布时间】:2018-07-12 01:25:50
【问题描述】:

我正在尝试运行一些基本的 Laravel Dusk 测试,但总是遇到 Facebook WebDriver 的问题:

我已经将 chrome 更新到最新版本,并使用 Hombrew 手动更新了 Chrome WebDriver:

有什么建议吗?

干杯,斯坦

错误:

Tests\Browser\Tests\Auth\SignUpTest::a_user_can_sign_up
Facebook\WebDriver\Exception\NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"body textarea[name='input[name="name"]']"}
  (Session info: headless chrome=64.0.3282.119)
  (Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.12.6 x86_64)

MySignUpTest:

public function a_user_can_sign_up()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit(new SignUpPage)
                ->signUp('Erika Musterfrau', 'erika.musterfrau@socialite.ch', 'password', 'password')
                ->assertPathIs('/dashboard')
                ->assertSeeIn('.navbar', 'Erika Musterfrau');
        });
    }

MySignUpPage:

 public function assert(Browser $browser)
    {
        $browser->assertPathIs('/register');
    }

    public function signUp(Browser $browser, $name = null, $email = null, $password = null, $passwordConfirmation = null)
    {
        $browser->type('@name', $name)
            ->type('@email', $email)
            ->type('@password', $password)
            ->type('@password_confirmation', $passwordConfirmation)
            ->press('Register');
    }

    /**
     * Get the element shortcuts for the page.
     *
     * @return array
     */
    public function elements()
    {
        return [
            '@name' => 'input[name="name"]',
            '@email' => 'input[name="email"]',
            '@password' => 'input[name="password"]',
            '@password_confirmation' => 'input[name="password_confirmation"]',
        ];
    }

OneOfMyRegisterInputViews:

<div class="form-group row">
                            <div class="col-lg-8 offset-2">
                                <input placeholder="name"
                                        type="text"
                                        class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}"
                                        name="name"
                                        value="{{ old('name') }}"
                                        required
                                >
                                @if ($errors->has('name'))
                                    <div class="invalid-feedback">
                                        <strong>{{ $errors->first('name') }}</strong>
                                    </div>
                                @endif
                            </div>
                        </div>

【问题讨论】:

    标签: php laravel google-chrome laravel-dusk


    【解决方案1】:

    对于那些仍然有问题的人:检查 Laravel 的 .env 文件中的 APP_URL 变量。运行应用程序的 URL 必须与 APP_URL 参数匹配

    【讨论】:

      【解决方案2】:

      希望您此时已经解决了这个问题。根据Laravel Dusk documentation

      虽然该方法在必要时接受一个,但我们不需要将 CSS 选择器传递给 type 方法。如果未提供 CSS 选择器,Dusk 将搜索具有给定名称属性的输入字段。最后,Dusk 将尝试查找具有给定名称属性的文本区域。

      查看您的错误,您似乎传递了错误的选择器。尝试使用如下输入字段的名称

      $browser->type('name', $name)
              ->type('email', $email)
              ->type('password', $password)
              ->type('password_confirmation', $passwordConfirmation)
              ->press('Register');
      

      【讨论】:

      • 嘿guttume,谢谢你的回答。我不知道是什么问题。我还测试了其他代码示例,但无法执行它们。因此,我将环境从 Wallet 切换到 Homestead。之后它工作没有任何问题。干杯,斯坦
      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多