2014-09-24 1 views
0

클래스의 .fmBigTbl 테이블에있는 모든 td의 텍스트를 가져 오려고합니다. piElements 대신에 no를 하드 코딩하면 예 : td:nth-of-type(2)이됩니다. 위의 작동하지만 숫자 대신 변수를 사용할 때 null을 출력합니다.td : nth-of-type ('+ element +')이 캐스퍼에서 작동하지 않습니다.

테이블의 모든 td를 반복 할 수 있습니까?

piElements = 1; 
var data; 
var count = 5; 
this.repeat(count, function() { 
     this.then(function() { 
     data = this.evaluate(function() { 
      return $('.fmBigTbl').find('td:nth-of-type('+piElements+').fmLblCell2').text(); 
     }); 
     this.echo(data); 
     piElements++; 
     }); 
}); 

답변

1

evaluate은 샌드 박스 처리됩니다. 내부 (페이지 컨텍스트)는 단순히 외부 범위의 변수 (캐스퍼 컨텍스트)에 액세스 할 수 없습니다. 당신은 evaluate에 명시 적으로 piElements 전달해야합니다

data = this.evaluate(function(piElements) { 
    return $('.fmBigTbl').find('td:nth-of-type('+piElements+').fmLblCell2').text(); 
}, piElements); 

docs에서 :

참고 : 인수와 평가 함수에 반환 값을 간단한 원시 객체 여야합니다. 경험 법칙 : JSON을 통해 직렬화 할 수 있다면 괜찮습니다.

또는 간단하게 사용할 수 casper.fetchText는 :

data = this.fetchText('.fmBigTbl td:nth-of-type('+piElements+').fmLblCell2'); 
+0

감사를 많이 완벽하게 일했다! –

관련 문제