2014-12-11 6 views
0

웹 사이트에 성공적으로 로그인 한 다음 양식을 작성하고 결과를 얻을 수 있습니다. 이제 내 앱을 사용하는 모든 사용자에게이 작업을 수행하려고합니다. 문제는 내가 채워야하는 양식에 사용자 이름이 바뀐 필드 이름이 있다는 것입니다. 이 같은CasperJS에서 동적 이름으로 필드 채우기

:

casper.thenOpen('http://www.foo.com/index.html', function() { 
    this.fill('form[action="/cgi-bin/login.cgi"]', { login: user,password:pass }, true); 
    this.click('input[type="submit"][name="enter"]'); 
    this.wait(5000,function(){ 
     this.capture('eff_ss2.png'); 
    }); 
}); 

모든 것이 여기 전까지 괜찮이 (필자는 로그인을 읽고 casper.cli.raw.get(); 으로 통과 한 후 나는이 수행

this.fill('form[action="../foo.cgi"]', { 
    'from_city':   ori, 
    'to_city':   dest, 
    'plan_03231':  'whatev', 
    'aspp_03231':  'whatev' 
}, true); 

03231이 변경됩니다 사용자에 따라 누가 로그인했는지 어떻게 동적으로 처리 할 수 ​​있습니까? 이미 만들려고했습니다 :

var plan = 'plan_0'+user; 
var obj{} 
obj[plan] = 'whatev' 

this.fill('form[action="../foo.cgi"]', { 
    'from_city':   ori, 
    'to_city':   dest, 
    obj, 
    'aspp_03231':  'whatev' 
}, true); 

하지만 작동하지 않습니다. 누군가 나를 도울 수 있습니까?

답변

1

마지막 스 니펫에서 변수의 사용자 ID는 user이지만 개체를 ​​개체 항목 위치에 넣습니다. 유효하지 않은 JavaScript입니다.

var obj = { 
    'from_city': ori, 
    'to_city': dest 
}; 

obj['plan_0'+user] = 'whatev'; 
obj['aspp_0'+user] = 'whatev'; 

this.fill('form[action="../foo.cgi"]', obj, true); 

단순히 이름의 시작 부분을 기준으로 양식 필드를 선택하는 것입니다 명시 적 사용자 ID가 필요하지 않습니다 더 쉬운 방법 : 개체 키는 복합이기 때문에, 당신은 obj[''+id] = ''; 구문을 사용하여 설정해야합니다 ^= attribute matchercasper.fillSelectors을 사용하는 속성 :

this.fillSelectors('form[action="../foo.cgi"]', { 
    '*[name="from_city"]': ori, 
    '*[name="to_city"]': dest, 
    '*[name^="plan_0"]': 'whatev' 
    '*[name^="aspp_0"]': 'whatev' 
}, true); 
+0

감사합니다. 두 번째 옵션이 훨씬 쉽습니다. – gepex