中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel Dusk中的使用技巧有哪些

發布時間:2021-01-25 11:51:22 來源:億速云 閱讀:178 作者:小新 欄目:編程語言

小編給大家分享一下Laravel Dusk中的使用技巧有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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中的使用技巧有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙门县| 黔东| 故城县| 绥阳县| 江油市| 平和县| 陈巴尔虎旗| 会泽县| 保康县| 焉耆| 嵊泗县| 鄂温| 临江市| 吉安县| 巴南区| 宜兰县| 井陉县| 涟水县| 章丘市| 东安县| 临澧县| 海晏县| 泸水县| 佛冈县| 内黄县| 东阿县| 永新县| 长海县| 高清| 都匀市| 绩溪县| 准格尔旗| 江城| 修武县| 前郭尔| 桂林市| 盐城市| 大同市| 湛江市| 山西省| 通化县|