2011-09-22 6 views
2

서버 쪽 작업을 시작하기 위해보기에서 JavaScript를 통해 내 서버에 양식을 제출하고 있습니다. 뷰는 호출되는 JavaScript 콜백에 의해 작업이 완료되었음을 감지합니다. 서버와 클라이언트 사이의 자바 스크립트 통신의 정확한 세부 사항은이 문제의 범위를 벗어나야하지만, 자세한 내용이 필요하면 알려주십시오. 도움이된다면 표준 Ajax보다는 Comet-like SignalR 라이브러리를 사용하고 있습니다.Watin에서 서버가 양식을 처리 할 때까지 기다리는 방법은 무엇입니까?

이제 Watin (2.1.0)에서이 뷰를 테스트하고 싶습니다. 서버 측 작업이 처리를 마칠 때까지 Watin을 대기 시키려면 어떻게합니까? 작업이 완료되었음을 감지하면보기의 속성을 업데이트해야합니까?

답변

3

js 및 html 코드의 모양에 따라 다릅니다. 그것은 그렇게 간단하지 않습니다. WaitUntil... 방법을 사용해보십시오.

작업이 완료되면 id가 foo 인 새 div 요소가 나타납니다. 기다리려면 다음 코드를 사용하십시오.

ie.Div("foo").WaitUntilExists(); 

가끔은 그렇게 간단하지 않습니다. 예를 들어 작업이 끝나면 테이블 내용이 변경됩니다. 이전 행이 제거되고 새 행이 나타납니다. 일치하는 경우 :

//Get cell reference 
var cell = ie.Table("bar").OwnTableRow(Find.First()).OwnTableCell(Find.First()); 
var cellRef = cell.GetJavascriptElementReference(); 

//Change text of that cell using javascript. jQuery could be used if it's used on that page 
//If you are 100% sure, that something will change, just assign cell.Text to text. If so, you don't even 
//need cellRef 
var text = "Dummy text or random or whatever"; 
ie.RunScript(cellRef + ".childNodes[0].nodeValue = '" + text + "'"); 

//TODO: 
//Do something here to fire ajax request 

//Wait until table will be updated, ie. wait until first cell will not contains assigned dummy text. 
//This could be done in many ways. 
ie.Table("bar").WaitUntil(t => t.OwnTableRow(Find.First()).OwnTableCell(Find.First()).Text != text); 
//or just: 
//cell.WaitUntil(c => c.Text != text), but maybe it will not work in your case 

어쨌든, 이것은 단지 몇 가지 팁입니다. 거의 항상 고통 스럽기 때문에 실제 코드를 표시하지 마십시오.)

+0

나는 당신이 대략적으로 설명한 것과 비슷한 것을했습니다. 완료시 요소에 속성을 추가했습니다. Watin에서 기다립니다. – aknuds1

관련 문제