Laravel Dusk 의 사용 기법 5 가 지 를 분석 합 니 다.
일부 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 의 사용 기법 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
단순 Laravel+Vue.js에서 VueUI를 사용하여 로그인 및 등록Laravel에는 웹 팩과 같은 Laravel-Mix가 있는데, 이를 이용해서 Laravel에 Vue.js를 실현할 수 있다. 이번에는 몇 가지 명령을 통해 간단하게 VueUI로 로그인하여 로그인을 할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.