我有一个看起来像这样的选择列表:
<select id="ListingType" name="Criteria/ListingTypeID" onchange="Search.toggleListingType(this);">
<option selected="selected" value="1">RH1</option>
<option value="2">BC4</option>
<option value="3">RR3</option>
<option value="4">RH2</option>
<option value="5">RE0</option>
</select>
我正在尝试将值设置为 3。我尝试了 3 种方法都没有成功。
1.
this.evaluate(function(value) {
document.querySelector('select#ListingType').value = value;
return true;
}, '3');
// insure the onChange JS is run
this.evaluate(function() {
var element = document.querySelector('select#ListingType');
var evt = document.createEvent('HTMLEvents');
evt.initEvent('change', false, true);
element.dispatchEvent(evt);
});
这似乎有效(不会引发错误),但值不会改变。
2.
this.fillSelectors('select#ListingType', {
'select[name="Criteria/ListingTypeID"]' : "3"
}, true);
这会引发错误消息:“CasperError:填写表单时遇到错误:表单中没有匹配 css 选择器“select[name="Criteria/ListingTypeID"]" 的字段''
我的选择器有什么问题?
3.
// In desperation...
this.sendKeys('select#ListingType', 'RR3');
这似乎也有效(没有错误),但值再次保持不变。
为了完整起见,我尝试在每个变体之后发送“更改”事件。我还在每个之后转储了所选元素的属性,并且它从不显示该值已设置。
请注意,这个选择器所在的页面上有大量的 JS 代码,并且这个 <select> 元素没有包含在 <form> 元素中。
我确定我犯了一些非常愚蠢的错误,但是在过去几天对这段代码进行了黑客攻击之后,我没有取得任何进展。有什么可行的方法来做到这一点?