我使用 Homestead版本 1.0.1和Laravel 版本 5.4.16。我通过阅读文档来设置 Laravel dusk 。
但是,当我php artisan dusk通过 ssh运行到我的家园时。我收到如下错误
PHPUnit 5.7.17 由 Sebastian Bergmann 和贡献者编写。
E 1 / 1 (100%)
时间:2.52 分钟,内存:10.00MB
有 1 个错误:
1) Tests\Browser\ExampleTest::testBasicExample Facebook\WebDriver\Exception\WebDriverCurlException: Curl 错误抛出 http POST 到 /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY ","chromeOptions":{"binary":"","args":["no-first-run"]}}}
操作在 30001 毫秒后超时,收到 0 个字节
有没有什么办法解决这一问题 ?
我做了一个新的Laravel项目:
composer create-project laravel/laravel testing_laravel
composer require laravel/dusk --dev
php artisan serve
php artisan dusk
Run Code Online (Sandbox Code Playgroud)
然后...
PHPUnit 6.3.1 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 1.12 seconds, Memory: 10.00MB
There was 1 failure:
1) Tests\Browser\ExampleTest::testBasicExample
Did not see expected text [Laravel] within element [body].
Failed asserting that false is true.
/Users/nobuhiroharada/work/laracast/testing_laravel/vendor/laravel/dusk/src/Concerns/MakesAssertions.php:274
/Users/nobuhiroharada/work/laracast/testing_laravel/vendor/laravel/dusk/src/Concerns/MakesAssertions.php:245
/Users/nobuhiroharada/work/laracast/testing_laravel/tests/Browser/ExampleTest.php:20
/Users/nobuhiroharada/work/laracast/testing_laravel/vendor/laravel/dusk/src/TestCase.php:92
/Users/nobuhiroharada/work/laracast/testing_laravel/tests/Browser/ExampleTest.php:21
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Run Code Online (Sandbox Code Playgroud)
Chrome浏览器不是lauching.
我在localhost上使用macOS Sierra 10.12.1.
"laravel/framework": "5.5.*",
"laravel/dusk": "^2.0"
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.
Laravel Dusk是否有和Selenium中类似的方式,可以通过“ innerHTML属性 ” 获取元素的源代码?
例如:innerHTML for <div>Hello <p>World!</p></div>将是:
Hello <p>World!</p>。
我正在运行脚本
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\RefreshDatabase;
class RegistrationTest extends DuskTestCase
{
use RefreshDatabase;
/** @test */
public function a_user_registers_for_an_account()
{
$this->browse(function (Browser $browser)
{
$browser->visit(route('app-registration-create'))
->type('name', 'John')
->type('lastName', 'Doe')
->type('email', 'john.doe@ps.com')
->type('password', 'password')
->type('password_confirmation', 'password')
->click('@dusk-accept')
->click('@register-button') //
->assertDontSee('The name field is required.');
});
$this->assertDatabaseHas('users', [
'email' => 'john.doe@ps.com',
'verified' => 0
]);
}
/** @test */
public function a_user_confirms_a_email_address()
{
$this->browse(function (Browser $browser)
{
$user = User::where('email', 'john.doe@ps.com')->first();
var_dump(route('app-registration-confirm-email', ['token' => $user->token])); // "http://ps.dev/app/registration/confirm/aPAWN1QlGyl8Id2vXIJU9Fn8G6bsef" …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在与Laravel Dusk一起测试时使用内存数据库。
这里有一个文件.env.dusk.local,具有以下值。
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
Run Code Online (Sandbox Code Playgroud)
这是浏览器测试文件的片段。
class ViewOrderTest extends DuskTestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_view_their_order()
{
$order = factory(Order::class)->create();
$this->browse(function (Browser $browser) use ($order) {
$browser->visit('/orders/' . $order->id);
$browser->assertSee('Order ABC'); //Order name
});
}
}
Run Code Online (Sandbox Code Playgroud)
当php artisan dusk被执行时,黄昏开始浏览器测试。
但是,Dusk似乎正在访问我的本地数据库,因为测试浏览器上有一个订单名称,该订单名称仅存在于我的本地数据库中,而“订单ABC”预计会显示在浏览器中。
根据文档,Laravel Dusk允许我们设置环境变量。
要强制Dusk在运行测试时使用其自己的环境文件,请在项目的根目录中创建一个.env.dusk。{environment}文件。例如,如果您要从本地环境启动黄昏命令,则应创建一个.env.dusk.local文件。
我不认为Dusk正在访问单独的数据库。
任何建议将被认真考虑。
我刚刚使用 Laravel Dusk 测试了一个 javascript 站点。
出于某种原因想要重用当前的浏览器及其会话和 cookie(让我保持在站点上的登录状态),所以我不需要通过身份验证过程。
有什么办法可以重用当前的浏览器?
我已经搜索过这个,但我没有找到实用的信息/示例。注意:我默认使用 Dusk 和 Google Chrome 和一个独立的 ChromeDriver(不是 Selenium)
我正在尝试使用 laravel dusk 来测试 404 not found 错误。特别是在加载图像时。阅读 laravel dusk 文档后,我发现没有任何断言可以帮助我测试是否发生 404 异常。
是否有一种让浏览器测试知道资源是否加载失败或根本不可能的好方法?
我刚刚开始使用 Laravel Dusk 来测试我的项目,需要一些指导。在我运行所有可用的测试之后,我希望能够在运行测试之前将我的数据库重置回。(如果在我运行测试之前我的数据库中有任何条目,我仍然希望在运行测试后看到它们。但是,在测试期间创建的任何条目,我不希望在测试运行后看到它们。 ) 关于我如何实现这一目标的任何指示?谢谢!
更新:
<?php
namespace Tests\Browser;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class UserRegisterTest extends DuskTestCase
{
use DatabaseTransactions;
/**
* A test for user registration.
* @group register
* @return void
*/
public function testRegisterUser()
{
//Register with all info filled out correctly
$this->browse(function ($browser){
$browser->visit('/register')
->type('firstName', 'JenLogin')
->type('lastName', 'Zhou')
->type('email', 'testLogin@gmail.com')
->type('bio', 'Hello, this user is for testing login purposes!')
->type('location_zip', '11111')
->type('password', '123456')
->type('password_confirmation', '123456')
->click('.btn-primary')
->assertPathIs('/home')
->click('.dropdown-toggle')
->click('.dropdown-menu li:last-child');
});
$this->assertDatabaseHas('users', ['firstName' …Run Code Online (Sandbox Code Playgroud) 我知道您可以从元素中获取文本,如下所示:
$text = $browser->text('.selector');
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何获取原始 HTML 内容?例如以下不起作用
$text = $browser->html('.selector');
Run Code Online (Sandbox Code Playgroud)
例如,如果元素是:
<div class='selector'><p>Hello</p></div>
Run Code Online (Sandbox Code Playgroud)
我想将以下内容作为输出(带有 < p> 标签):
<p>Hello</p>
Run Code Online (Sandbox Code Playgroud)
谢谢
public function tearDown()
{
$this->browse(function (Browser $browser) {
$browser->click('#navbarDropdown')
->click('.dropdown-item');
});
parent::tearDown();
}
Run Code Online (Sandbox Code Playgroud)
当我将 tearDown() 方法应用于我的测试类时,我收到一条错误消息,告诉我the tearDown() must be compatible with Illuminate\Foundation\Testing\TestCase::tearDown()我做错了什么?
每次我运行测试时,我都需要登录。我想在 setUp() 方法中登录并在 tearDown 中再次注销,以便我可以独立执行我的测试。
这是我的 setUp() 方法
use databaseMigrations;
public function setUp(): void
{
parent::setUp();
$this->seed('DatabaseSeeder');
$this->browse(function (Browser $browser) {
$browser->visit('/admin')
->type('email', 'admin@admin.com')
->type('password', 'admin')
->press('Login');
});
}
Run Code Online (Sandbox Code Playgroud)
setUp() 方法工作得很好。即使我没有在 tearDown() 方法中添加任何代码,除了parent::tearDown();,我也会收到一个错误,那么我在我的 tearDown() 方法中做错了什么?
public function tearDown()
{
parent::tearDown();
}
Run Code Online (Sandbox Code Playgroud)