你可以做这样的事情,你有一个包含三个相互关联的选择的表单。
var valueFirstSelect = 125;
var valueSecondSelect = 6;
var valueThirdSelect = 47;
//create casper object
var casper = require('casper').create({
loadImages:false,
verbose: true,
logLevel: 'debug'
});
//open url
casper.start('http://thewebsite.com');
casper.then(function(){
//select option on first select
this.evaluate(function(selectValue){
document.querySelector('select[name=s1]').value = selectValue;
return true;
},valueFirstSelect);
//firing onchange event to populate the second select
this.evaluate(function() {
var element = document.querySelector('select[name=s1]');
var evt = document.createEvent('HTMLEvents');
evt.initEvent('change', false, true);
element.dispatchEvent(evt);
});
//wait until the second select is populated
this.waitFor(function check() {
return this.evaluate(function() {
return document.querySelectorAll('select[name=s2] option').length > 1;
});
}, function then() {
//select option on second select
this.evaluate(function(selectValue){
document.querySelector('select[name=s2]').value = selectValue;
return true;
},valueSecondSelect);
//firing onchange event to populate the third select
this.evaluate(function() {
var element = document.querySelector('select[name=s2]');
var evt = document.createEvent('HTMLEvents');
evt.initEvent('change', false, true);
element.dispatchEvent(evt);
});
//wait until the third select is populated
this.waitFor(function check() {
return this.evaluate(function() {
return document.querySelectorAll('select[name=s3] option').length > 1;
});
}, function then() {
//select option on third select
this.evaluate(function(selectValue){
document.querySelector('select[name=s3]').value = selectValue;
return true;
},valueThirdSelect);
//click submit button
casper.thenClick('form.items input[type="submit"]', function() {
/* Do something after click */
});
});
});
});
casper.run(function() {
//finish execution script
this.exit();
});
如果您的上下文页面包含 jQuery 库,则此代码可能会有所不同(更小更简洁)。
这里有一个使用 casperjs 和 jQuery 与动态选择列表的示例。
带有链式选择的 CasperJs 和 Jquery