次のような選択リストがあります。
<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);
これにより、次のエラー メッセージがスローされます。
セレクターの何が問題になっていますか?
3.
// In desperation...
this.sendKeys('select#ListingType', 'RR3');
これも機能しているように見えますが (エラーはありません)、値は変更されていません。
完全を期すために、各バリエーションの後に「変更」イベントを送信してみました。また、選択した要素の属性をそれぞれの後にダンプしますが、値が設定されていると表示されることはありません。
このセレクターがあるページには大量の JS コードがあり、この <select> 要素は <form> 要素にラップされていないことに注意してください。
本当にばかげた間違いを犯していると確信していますが、ここ数日間このコードをハッキングした後、何の進歩もありませんでした。これを行うための有効な方法は何ですか?