Laravel Dusk 의 사용 기법 5 가 지 를 분석 합 니 다.

4879 단어 Laravelduck
1.숨겨 진 필드 채 우기
일부 JS 구성 요 소 를 테스트 할 때(예 를 들 어 자동 완성,날짜 선택 기 등)동작 시 뮬 레이 션 을 작성 하여 이 구성 요소 와 상호작용 을 해 야 할 수도 있 습 니 다.이 구성 요소 들 의 대부분 은 결국 숨겨 진 필드 에 값 을 저장 할 것 입 니 다.숨겨 진 필드 에 값 을 직접 입력 하 는 것 이 더 편리 할 수 있 습 니 다.이것 은 불안정 한 테스트 를 방지 하고 우리 가 가지 고 있 지 않 거나 통제 하지 않 는 것(제3자 구성 요소)을 테스트 하지 않도록 확보 할 수 있다.
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 사이트 가 지리 적 위 치 를 제공 해 야 하 는 페이지 를 테스트 해 야 했다.직접 시 뮬 레이 션 방법 이 없 기 때문에 getCurrent Position 방법 을 다시 써 야 합 니 다.이 방법 은 최종 적 으로 페이지 에서 호출 될 것 입 니 다.

/** @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 선택 기 를 사용 하여 요 소 를 찾 을 수 없 는 상황 을 만 날 수 있다.이것 은 보통 동적 표 에서 발생 하거나 내 가 수정 할 수 없 는 제3자 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 에서 capture Failures For()방법 을 만들어 야 합 니 다.Laravel\Dusk\Concerns\Provides Browser 에서 최초 로 정 의 된 방법 을 덮어 씁 니 다.

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 의 사용 기법 에 대한 상세 한 내용 을 분석 하고 다섯 개의 Laravel Dusk 의 사용 기법 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기