濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 分析五個(gè)Laravel Dusk的使用技巧

分析五個(gè)Laravel Dusk的使用技巧

熱門標(biāo)簽:滄州電銷外呼系統(tǒng)價(jià)格 銀行信貸電話機(jī)器人 溫州外呼系統(tǒng)招商 天津電銷外呼系統(tǒng)違法嗎 上海400客服電話怎么申請(qǐng) 400電話個(gè)人能不能辦理 合肥ai電銷機(jī)器人費(fèi)用 凱立德地鐵站地圖標(biāo)注 手機(jī)外呼系統(tǒng)什么原理

1. 填充隱藏字段

在測(cè)試某些 JS 組件時(shí) (例如自動(dòng)完成,日期選擇器等) ,可能需要編寫動(dòng)作模擬操作與這些組件交互。猶豫這些組件中的大多數(shù)最終都會(huì)將值保存到隱藏字段中。那么將值直接填寫到隱藏字段中可能更加方便。這可以防止不穩(wěn)定的測(cè)試,并確保我們不測(cè)試自己不擁有 / 控制的東西 (第三方組件)。

盡管 Laravel Dusk 沒有為我們提供類似$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é)果。沒有可用的直接模擬方法,因此我不得不重寫 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)常需要訪問基礎(chǔ) WebDriver 實(shí)例。

$browser->driver->findElement( WebDriverBy::xpath("http://table[@class='x-grid3-row-table']/tbody/tr/td/div/a[contains(text(),'$value')]") )
                ->click();

這種方法的唯一問題就是 [問題不大] 可能會(huì)終端$browser鏈?zhǔn)秸{(diào)用.*

4. 整頁(yè)截屏

Laravel dusks 為我們提供了失敗測(cè)試的屏幕截圖,這對(duì)于了解測(cè)試失敗的原因非常有幫助。但是,有時(shí)錯(cuò)誤或有問題的元素可能在屏幕顯示區(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. 訪問瀏覽器錯(cuò)誤日志

這個(gè)沒什么問題,只是我發(fā)現(xiàn)的一些有趣的東西。我們可以通過調(diào)用 $browser->driver->manage()->getLog(‘browser') 來(lái)訪問瀏覽器控制臺(tái)日志。

這將在瀏覽器的控制臺(tái)中返回一系列日志。例如,對(duì)于頁(yè)面上沒有 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)文章!

您可能感興趣的文章:
  • 淺談Laravel中使用Slack進(jìn)行異常通知
  • 如何用Laravel包含你自己的幫助函數(shù)
  • 詳解Laravel框架的依賴注入功能
  • php+laravel 掃碼二維碼簽到功能
  • laravel的數(shù)據(jù)表填充器使用詳解
  • laravel ajax curd 搜索登錄判斷功能的實(shí)現(xiàn)
  • Laravel中Kafka的使用詳解
  • laravel使用redis隊(duì)列實(shí)例講解
  • Laravel的加密解密與哈希實(shí)例講解
  • Laravel中10個(gè)有用的用法小結(jié)

標(biāo)簽:七臺(tái)河 赤峰 白城 酒泉 溫州 怒江 金華 洛陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《分析五個(gè)Laravel Dusk的使用技巧》,本文關(guān)鍵詞  分析,五個(gè),Laravel,Dusk,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《分析五個(gè)Laravel Dusk的使用技巧》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于分析五個(gè)Laravel Dusk的使用技巧的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    遂平县| 乌鲁木齐县| 满洲里市| 望城县| 石屏县| 甘泉县| 麻栗坡县| 德安县| 武清区| 江门市| 余江县| 广宁县| 托里县| 喀喇沁旗| 易门县| 观塘区| 新丰县| 吴堡县| 静安区| 黄石市| 三台县| 华容县| 南阳市| 剑阁县| 南雄市| 即墨市| 方山县| 文安县| 靖州| 慈利县| 衡南县| 吉安市| 张家川| 桐城市| 洞头县| 卢龙县| 石狮市| 白玉县| 高台县| 扎赉特旗| 汪清县|