分析五個(gè)Laravel Dusk的使用技巧
1. 填充隱藏字段
在測(cè)試某些 JS 組件時(shí) (例如自動(dòng)完成,日期選擇器等) ,可能需要編寫(xiě)動(dòng)作模擬操作與這些組件交互。猶豫這些組件中的大多數(shù)最終都會(huì)將值保存到隱藏字段中。那么將值直接填寫(xiě)到隱藏字段中可能更加方便。這可以防止不穩(wěn)定的測(cè)試,并確保我們不測(cè)試自己不擁有 / 控制的東西 (第三方組件)。
盡管 Laravel Dusk 沒(méi)有為我們提供類似$browser->fillHidden($field, $value)的方法,但我們可以使用Dusk Browser Macros來(lái)實(shí)現(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)不得不測(cè)試一個(gè)頁(yè)面,該頁(yè)面需要 HTML 網(wǎng)站提供地理位置,以便它可以顯示一些結(jié)果。沒(méi)有可用的直接模擬方法,因此我不得不重寫(xiě) getCurrentPosition 方法,該方法最終將由頁(yè)面調(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 選擇器
有時(shí),我會(huì)遇到無(wú)法使用 CSS 選擇器來(lái)定位元素的情況。這些通常發(fā)生在動(dòng)態(tài)表格中,或者在我無(wú)法修改的第三方 js 組件中。但是,Laravel Dusk 不直接支持 XPath 選擇器,并且經(jīng)常需要訪問(wèn)基礎(chǔ) WebDriver 實(shí)例。
$browser->driver->findElement( WebDriverBy::xpath("http://table[@class='x-grid3-row-table']/tbody/tr/td/div/a[contains(text(),'$value')]") )
->click();
這種方法的唯一問(wèn)題就是 [問(wèn)題不大] 可能會(huì)終端$browser鏈?zhǔn)秸{(diào)用.*
4. 整頁(yè)截屏
Laravel dusks 為我們提供了失敗測(cè)試的屏幕截圖,這對(duì)于了解測(cè)試失敗的原因非常有幫助。但是,有時(shí)錯(cuò)誤或有問(wèn)題的元素可能在屏幕顯示區(qū)域以外。
要在 Laravel Dusk 中創(chuàng)建完整的屏幕截圖,我們必須在我們的 tests \ DuskTestCase.php 中創(chuàng)建一個(gè) captureFailuresFor() 方法,它將覆蓋最初在 Laravel\Dusk\Concerns\ProvidesBrowser 中定義的一個(gè)方法。
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)在,無(wú)論何時(shí)我們調(diào)用$browser->screenshot('$shotname'),發(fā)生錯(cuò)誤時(shí)我們都將獲得完整的屏幕截圖
5. 訪問(wèn)瀏覽器錯(cuò)誤日志
這個(gè)沒(méi)什么問(wèn)題,只是我發(fā)現(xiàn)的一些有趣的東西。我們可以通過(guò)調(diào)用 $browser->driver->manage()->getLog(‘browser') 來(lái)訪問(wèn)瀏覽器控制臺(tái)日志。
這將在瀏覽器的控制臺(tái)中返回一系列日志。例如,對(duì)于頁(yè)面上沒(méi)有 javascript 錯(cuò)誤的測(cè)試而言,它可能很有用。
@test
public function no_browser_errors()
{
$this->browse(function ($browser) {
$this->assertEmpty($browser->driver->manage()->getLog('browser'));
});
}
但是請(qǐng)注意,它不包含console.log調(diào)用的輸出
以上就是分析五個(gè)Laravel Dusk的使用技巧的詳細(xì)內(nèi)容,更多關(guān)于五個(gè)Laravel Dusk的使用技巧的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php 數(shù)組字符串搜索array_search技巧
本文給大家總結(jié)了一下PHP實(shí)現(xiàn)數(shù)組字符串搜索的幾種使用技巧,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2016-07-07
基于OpenCV的PHP圖像人臉識(shí)別技術(shù)
本文所介紹的技術(shù)不是原創(chuàng),而是從一個(gè)叫Robert Eisele的德國(guó)人那里學(xué)習(xí)來(lái)的。他寫(xiě)了一個(gè)PHP擴(kuò)展openCV,只封裝了兩個(gè)函數(shù),叫face_detect和face_count。2009-10-10
php銀聯(lián)網(wǎng)頁(yè)支付實(shí)現(xiàn)方法
這篇文章主要介紹了php銀聯(lián)網(wǎng)頁(yè)支付實(shí)現(xiàn)方法,實(shí)例分析了php操作銀聯(lián)網(wǎng)支付接口的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
php數(shù)組函數(shù)序列之a(chǎn)rray_key_exists() - 查找數(shù)組鍵名是否存在
array_key_exists() 函數(shù)判斷某個(gè)數(shù)組中是否存在指定的 key,如果該 key 存在,則返回 true,否則返回 false2011-10-10
PHP zlib擴(kuò)展實(shí)現(xiàn)頁(yè)面GZIP壓縮輸出
GZIP(GNU-ZIP)是一種壓縮技術(shù)。經(jīng)過(guò)GZIP壓縮后頁(yè)面大小可以變?yōu)樵瓉?lái)的30%甚至更小。這樣用戶瀏覽的時(shí)候就會(huì)感覺(jué)很爽很愉快!2010-06-06

