Laravel Dusk 是 Laravel 的一个表达性强、易于使用,且功能强大的浏览器自动化测试工具。通过 Dusk 可以以编程的方式测试 JavaScript 驱动的应用程序。在使用 Dusk 编写测试案例时,我经常遇到一些限制。现在我在本文中将这些情况以及如何克服分享给大家。
1. 填充隐藏字段
在测试某些 JS 组件时 (例如自动完成,日期选择器等) ,可能需要编写动作模拟操作与这些组件交互。犹豫这些组件中的大多数最终都会将值保存到隐藏字段中。那么将值直接填写到隐藏字段中可能更加方便。这可以防止不稳定的测试,并确保我们不测试自己不拥有 / 控制的东西 (第三方组件)。
尽管 Laravel Dusk 没有为我们提供类似 $browser->fillHidden($field, $value) 的方法,但我们可以使用 Dusk Browser Macros 来实现。
//将以下代码添加到 serviceprovider.php 中 Browser::macro('fillHidden', function ($name , $value) { $this->script("document.getElementsByName('$name')[0].value = '$value'"); return $this; }); // 然后你可以像这样使用 /** @test */ public function fill_hidden_fields() { $this->browse(function (Browser $browser) { $browser->visit('https://website.com/form') ->type('input.name', $name) ->type('input.address', $address) ->fillHidden('checkin_date', $date) ->click('#Submit') ->waitForText('Orders'); }); }
2. 模拟 HTML 地理位置
我曾经不得不测试一个页面,该页面需要 HTML 网站提供地理位置,以便它可以显示一些结果。没有可用的直接模拟方法,因此我不得不重写 getCurrentPosition 方法,该方法最终将由页面调用。
/** @test */ public function test_geo_location() { $faker = Faker\Factory::create(); $latitude = $faker->latitude; $longitude = $faker->longitude; $this->browse(function (Browser $browser) use($latitude, $longitude) { $browser->visit(new Homepage) ->assertOnPage(); $browser->driver->executeScript( "window.navigator.geolocation.getCurrentPosition = function(onSuccessCallback) { var position = { 'coords': { 'latitude': {$latitude}, 'longitude': {$longitude} } }; onSuccessCallback(position); }" ); $browser->click('#geolocate-button') ->assertSee('Longitude: $longitude') ->assertSee('Latitude: Latitude') }); }
3. 使用 XPath 选择器
有时,我会遇到无法使用 CSS 选择器来定位元素的情况。这些通常发生在动态表格中,或者在我无法修改的第三方 js 组件中。但是,Laravel Dusk 不直接支持 XPath 选择器,并且经常需要访问基础 WebDriver 实例。
$browser->driver->findElement( WebDriverBy::xpath("//table[@class='x-grid3-row-table']/tbody/tr/td/div/a[contains(text(),'$value')]") )->click();
这种方法的唯一问题就是 [问题不大] 可能会终端 $browser 链式调用.
4. 整页截屏
Laravel dusks 为我们提供了失败测试的屏幕截图,这对于了解测试失败的原因非常有帮助。但是,有时错误或有问题的元素可能在屏幕显示区域以外。
要在 Laravel Dusk 中创建完整的屏幕截图,我们必须在我们的 tests \ DuskTestCase.php 中创建一个 captureFailuresFor() 方法,它将覆盖最初在 Laravel\Dusk\Concerns\ProvidesBrowser 中定义的一个方法。
protected function captureFailuresFor($browsers) { $browsers->each(function (Browser $browser, $key) { $body = $browser->driver->findElement(WebDriverBy::tagName('body')); if (!empty($body)) { $currentSize = $body->getSize(); $size = new WebDriverDimension($currentSize->getWidth(), $currentSize->getHeight()); $browser->driver->manage()->window()->setSize($size); } $name = str_replace('\\', '_', get_class($this)).'_'.$this->getName(false); $browser->screenshot('failure-'.$name.'-'.$key); }); }
现在,无论何时我们调用 $browser->screenshot('$shotname') ,发生错误时我们都将获得完整的屏幕截图
5. 访问浏览器错误日志
这个没什么问题,只是我发现的一些有趣的东西。我们可以通过调用 $browser->driver->manage()->getLog(‘browser’) 来访问浏览器控制台日志。
这将在浏览器的控制台中返回一系列日志。例如,对于页面上没有 javascript 错误的测试而言,它可能很有用。
@test public function no_browser_errors() { $this->browse(function ($browser) { $this->assertEmpty($browser->driver->manage()->getLog('browser')); }); }
但是请注意,它不包含 console.log 调用的输出
结论
感谢您阅读本文,希望您有所收获。
感谢阅读
以上是Laravel Dusk 中五個的使用技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

PHP和Laravel不是直接可比的,因為Laravel是基於PHP的框架。 1.PHP適合小型項目或快速原型開發,因其簡單直接。 2.Laravel適合大型項目或高效開發,因其提供豐富功能和工具,但學習曲線較陡,性能可能不如純PHP。

laravelisabackendframeworkbuiltonphp,設計ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

本文討論了Laravel中的創建和使用自定義刀片指令以增強模板。它涵蓋了定義指令,在模板中使用它們,並在大型項目中管理它們,強調了改進的代碼可重複性和R等好處

本文討論了使用組件在Laravel中創建和自定義可重複使用的UI元素,從而為組織提供最佳實踐並建議增強包裝。

文章討論了使用Laravel的路由來創建SEO友好的URL,涵蓋最佳實踐,規範的URL和SEO優化工具。WordCount:159


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境