分析五個Laravel Dusk的使用技巧
1. 填充隱藏字段
在測試某些 JS 組件時 (例如自動完成,日期選擇器等) ,可能需要編寫動作模擬操作與這些組件交互。猶豫這些組件中的大多數(shù)最終都會將值保存到隱藏字段中。那么將值直接填寫到隱藏字段中可能更加方便。這可以防止不穩(wěn)定的測試,并確保我們不測試自己不擁有 / 控制的東西 (第三方組件)。
盡管 Laravel Dusk 沒有為我們提供類似$browser->fillHidden($field, $value)的方法,但我們可以使用Dusk Browser Macros來實現(xiàn)。
//將以下代碼添加到 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 地理位置
我曾經(jīng)不得不測試一個頁面,該頁面需要 HTML 網(wǎng)站提供地理位置,以便它可以顯示一些結(jié)果。沒有可用的直接模擬方法,因此我不得不重寫 getCurrentPosition 方法,該方法最終將由頁面調(diào)用。
/** @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 選擇器來定位元素的情況。這些通常發(fā)生在動態(tài)表格中,或者在我無法修改的第三方 js 組件中。但是,Laravel Dusk 不直接支持 XPath 選擇器,并且經(jīng)常需要訪問基礎(chǔ) WebDriver 實例。
$browser->driver->findElement( WebDriverBy::xpath("http://table[@class='x-grid3-row-table']/tbody/tr/td/div/a[contains(text(),'$value')]") ) ->click();
這種方法的唯一問題就是 [問題不大] 可能會終端$browser鏈式調(diào)用.*
4. 整頁截屏
Laravel dusks 為我們提供了失敗測試的屏幕截圖,這對于了解測試失敗的原因非常有幫助。但是,有時錯誤或有問題的元素可能在屏幕顯示區(qū)域以外。
要在 Laravel Dusk 中創(chuàng)建完整的屏幕截圖,我們必須在我們的 tests \ DuskTestCase.php 中創(chuàng)建一個 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); }); }
現(xiàn)在,無論何時我們調(diào)用$browser->screenshot('$shotname'),發(fā)生錯誤時我們都將獲得完整的屏幕截圖
5. 訪問瀏覽器錯誤日志
這個沒什么問題,只是我發(fā)現(xiàn)的一些有趣的東西。我們可以通過調(diào)用 $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調(diào)用的輸出
以上就是分析五個Laravel Dusk的使用技巧的詳細內(nèi)容,更多關(guān)于五個Laravel Dusk的使用技巧的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql下創(chuàng)建字段并設(shè)置主鍵的php代碼
php+mysql創(chuàng)建字段并設(shè)置主鍵示例2010-05-05支持漢轉(zhuǎn)拼和拼音分詞的PHP中文工具類ChineseUtil
本文給大家推薦的是一款PHP的中文分詞工具類,功能包括支持漢字轉(zhuǎn)拼音、拼音分詞、簡繁互轉(zhuǎn)。非常不錯,有需要的小伙伴可以參考下2018-02-02php采集內(nèi)容中帶有圖片地址的遠程圖片并保存的方法
這篇文章主要介紹了php采集內(nèi)容中帶有圖片地址的遠程圖片并保存的方法,可實現(xiàn)采集并保存遠程圖片的功能,是非常實用的技巧,需要的朋友可以參考下2015-01-01WordPress中用于創(chuàng)建以及獲取側(cè)邊欄的PHP函數(shù)講解
這篇文章主要介紹了WordPress中用于創(chuàng)建以及獲取側(cè)邊欄的PHP函數(shù)講解,分別為register_sidebar()函數(shù)和get_sidebar()的使用,需要的朋友可以參考下2015-12-12php實現(xiàn)mysql備份恢復(fù)分卷處理的方法
這篇文章主要介紹了php實現(xiàn)mysql備份恢復(fù)分卷處理的方法,包括完整的MySQL備份恢復(fù)類文件及用法實例,注釋包含了詳盡的用法說明,是非常實用的技巧,需要的朋友可以參考下2014-12-12PHP實現(xiàn)生成數(shù)據(jù)字典功能示例
這篇文章主要介紹了PHP實現(xiàn)生成數(shù)據(jù)字典功能,涉及php針對mysql常見的連接、數(shù)據(jù)表查詢、遍歷、table表格構(gòu)成等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05