13

nullSelenium を実行すると、次の JavaScript コードが返されJavascriptExecutorます。ただし、Firefox 開発者コンソールで同じコードを実行すると、値が返されました。

function tmp(){
    var attrb = jQuery(jQuery("[name='q']")[0]).attr('type');
    if(typeof attrb !== 'undefined' && attrb !== false){
        return attrb;
    } else {
        return '';
    }
}

tmp();

以下は、上記と同じ JS を使用した WebDriver コードです。

JavascriptExecutor jsExec = (JavascriptExecutor)driver;
Object inpType = 
       jsExec.executeScript("function tmp(){...}tmp();");
System.out.println("Type: " + inpType);

null「テキスト」文字列の代わりに上記の出力。何か案は?

4

3 に答える 3

20

executeScript() メソッドでtmp ()の代わりにreturn tmp()を使用する必要があります。関連するリファレンス driver.executeScript() は、単純な JavaScript に対して NullPointerException を返します。

于 2014-02-18T07:32:11.957 に答える
1

問題は、 で 2 つのステートメントを実行することですexecuteScript()。tmp() の関数定義と tmp() の関数呼び出し。

詳細はわかりませんが、関数定義がnullを返すようです。

executeScript は返すことができる最初の値を返すため、null を返します。関数を定義せず、インラインでコードを記述しても機能します。

JavascriptExecutor jsExec = (JavascriptExecutor) driver;
Object inpType = jsExec
    .executeScript("var attrb = jQuery(jQuery(\"[name='q']\")[0]).attr('type');"+
            "if(typeof attrb !== 'undefined' && attrb !== false)" +
            "{return attrb;}" +
            "else{return '';}");
System.out.println("-------------- Type: " + inpType);

これにより、期待値が出力されます。

""編集:また、投稿されたコードはaroundをエスケープしません[name='q']。これにより文字列が終了し、構文エラーが発生します。

于 2013-07-29T09:06:25.690 に答える