0

次のような選択リストがあります。

<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> 要素にラップされていないことに注意してください。

本当にばかげた間違いを犯していると確信していますが、ここ数日間このコードをハッキングした後、何の進歩もありませんでした。これを行うための有効な方法は何ですか?

4

1 に答える 1

2

値の変化を簡単に確認するには、slimerJS (Firefox を開きます) を使用できます。

    this.fillSelectors('form#id_form', {
        'select[name="Criteria/ListingTypeID"]' :  "3"
        }, false);
    this.wait(6000,function(){  
        this.echo("i saw my new value");
    });     

そして、値ではなくテキストでオプションを埋めたい場合(私はそれが簡単だと思います):この関数を使用します:

casper.fillSelectOptionByText = function (selectSelector,text){
    this.evaluate(function(sel,setByText) {
        $(sel + " > option").each(function() {
            if($(this).text() === setByText) {
                $(this).attr('selected', 'selected');            
            }                        
        });
    },selectSelector,text);
};

そしてあなたのテストで:

this.fillSelectOptionByText("select[name='year of birth']","1991");

もちろん、ページにはjqueryが必要です。そうしないと、jqueryが挿入されます。

于 2014-02-17T11:27:20.557 に答える