2017-03-14 1 views
2

나는 사용자 스크립트를 작성 중이며 reactjs에서 작성한 양식을 채울 수 없습니다. 내 코드 :프로그래밍 방식으로 반응 양식 작성

document.querySelector("#id-username").value = "[email protected]"; 
// Attempt to notify framework using input event 
document.querySelector("#id-username").dispatchEvent(new Event("input", {data:"[email protected]"})); 
// Attempt to notify framework using change event 
document.querySelector("#id-username").dispatchEvent(new Event("change")); 
// This doesn't help either 
document.querySelector("#id-username").dispatchEvent(new Event("blur")); 
// Submit the form using button (it's AJAX form) 
document.querySelector("fieldset div.wrap button").click(); 

이 코드를 페이지로드 후 developper 도구 콘솔에 입력했습니다. 양식이 내 programatical 입력을 무시하지만 :

image description

양식

here를 찾을 수 있습니다. 내 작업의 목적은 지정된 웹 사이트에 대한 로그인을 자동화하는 것입니다. 특정 URL을 제공했지만 모든 reactjs 양식에 적용 할 수있는이 문제 (예 : 일부 reactjs API 사용)에 대한 일반적인 해결책을 기대합니다. 다른 사용자는 사이트 자동화 테스트를 작성하는 데이 솔루션이 필요할 수 있습니다.

+1

. 자동화를 시도하기 전에 document.load가 시작되기를 기다리는 것이 좋습니다. 예를 들어 콘솔에서 첫 번째 줄을 실행하고 사용자 이름 상자에 값을 입력했습니다. –

+0

'waitForKeyElements' 또는'MutationObserver' 만 사용하십시오. –

+0

@KeithRousseau 나는 firefox (로딩 후 오랜 시간) 콘솔에서 이것을 테스트했다. 당신이 보는 결과는 userscript에서 나온 것이 아니며 필자도 글을 쓰지 않았다. 페이지를로드 한 후 해당 명령을 테스트했지만 이미 실패했습니다. –

답변

5

이벤트를 ReactJS에 emmited하여 값을 등록해야합니다. 특히, input 이벤트. React JS는 입력 필드가 아닌 document 레벨에 리스너가 하나만 있습니다. 입력 필드 요소의 값을 설정하는 다음 방법을 만들었습니다.

function reactJSSetValue(elm, value) { 
    elm.value = value; 
    elm.defaultValue = value; 
    elm.dispatchEvent(new Event("input", {bubbles: true, target: elm, data: value})); 
} 
+0

이것은 정확히 내가 찾던 내용이었습니다. 한 가지 수정 : 이벤트의 대상 매개 변수를 사용자 이름 대신 elm으로 변경해야합니다. – funkju

관련 문제