我一直在尝试将Laravel Dusk集成到我的测试方案中已经有一个星期了,但无法进行任何测试以实际提供预期的结果。情况如下:

  • 我正在使用PHP 7.1在Homestead上运行Laravel 55(按项目安装)。*
  • 我按照docs中的安装步骤安装了Dusk。

  • 开箱即用的测试不起作用
  • 我将在this article on "Laravel Dusk on Homestead"中找到的步骤添加到了要点中,要点发现here in "setup-headless-selenium-xvfb.sh"到我的配置文件中。这消除了我遇到的许多异常。
  • 我也将所有现有环境变量完全添加到phpunit.dusk.xml文件的php节点中,就像在phpunit.xml
  • 中已经成功运行的phpunit测试中一样

    但是现在当我运行测试时,我只是无法获得预期的输出。这就是我在做什么。我在主页('/')查看文件中添加一个输入字段,例如:<input id="dusk-test" value="1234">
    我运行了这个测试,它是原始示例测试的一个mod,并且是唯一的测试:
    <?php
    
    namespace Tests\Browser;
    
    use Tests\DuskTestCase;
    use Laravel\Dusk\Browser;
    
    class ExampleTest extends DuskTestCase
    {
        public function testBasicExample()
        {
            $this->browse(function (Browser $browser)
            {
                $browser->visit('/')->refresh()
                    ->assertValue('#dusk-test', '1234')
                ;
            });
        }
    }
    

    ...通过运行php artisan dusk,这是我每次的输出
    PHPUnit 6.4.3 by Sebastian Bergmann and contributors.
    
    E                                                                   1
    / 1 (100%)
    
    Time: 1.07 seconds, Memory: 12.00MB
    
    There was 1 error:
    
    1) Tests\Browser\ExampleTest::testBasicExample
    Facebook\WebDriver\Exception\NoSuchElementException: no such element:
    Unable to locate element: {"method":"id","selector":"dusk-test"}
      (Session info: headless chrome=62.0.3202.62)
      (Driver info: chromedriver=2.32.498513 (2c63aa53b2c658de596ed550eb5267ec5967b351),platform=Linux 4.4.0-92-generic x86_64)
    
    
      /home/vagrant/landing/vendor/facebook/webdriver/lib/Exception/WebDriverException.php:102 /home/vagrant/landing/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:320
      /home/vagrant/landing/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:535
      /home/vagrant/landing/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:175
      /home/vagrant/landing/vendor/laravel/dusk/src/ElementResolver.php:281
      /home/vagrant/landing/vendor/laravel/dusk/src/ElementResolver.php:327
      /home/vagrant/landing/vendor/laravel/dusk/src/Concerns/MakesAssertions.php:632
      /home/vagrant/landing/tests/Browser/ExampleTest.php:22
      /home/vagrant/landing/vendor/laravel/dusk/src/TestCase.php:92
      /home/vagrant/landing/tests/Browser/ExampleTest.php:24
    
      ERRORS!
      Tests: 1, Assertions: 0, Errors: 1.
    

    更令人困惑的是,这是我从测试中转储时的输出。这是我的转储方式
    <?php
    
    namespace Tests\Browser;
    
    use Tests\DuskTestCase;
    use Laravel\Dusk\Browser;
    
    class ExampleTest extends DuskTestCase
    {
        /**
         * A basic browser test example.
         *
         * @return void
         */
        public function testBasicExample()
        {
            $this->browse(function (Browser $browser)
            {
                $browser->visit('/')
                    ->dump()
                ;
            });
        }
    }
    

    我再次运行php artisan dusk后的输出是
    PHPUnit 6.4.3 by Sebastian Bergmann and contributors.
    
    "<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>"
    

    这绝对不是我的主页。我还从$url中转储了vendor/laravel/dusk/src/Browser.php值,并使我的项目正确APP_URL

    我很茫然。黄昏被发送到正确的位置,页面上肯定有输入和值。但是,我无法让Dusk提供预期的输出,即从元素中检索了12345。

    所有帮助表示赞赏。

    最佳答案

    也许我在说的是错误的...但是Laravel黄昏似乎需要dusk而不是id:像dusk="dusk-test"。也可以在$browser->visit('/')>refresh()->assertValue('@dusk-test', '1234')之后调用它,它应该像doc一样。

    07-24 13:40