2014-12-11 1 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

В вашем последнем фрагменте у вас есть идентификатор пользователя в переменной user, но поместите объект в место предмета. Это недействительный JavaScript. Так как ключевой объект является составным, вам необходимо установить его с помощью obj[''+id] = ''; синтаксиса:

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); 

Легче метода, где вам не нужен явный идентификатор пользователя просто выбрать поля формы на основе начала имени атрибутов с помощью ^= attribute matcher и casper.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