簡體   English   中英

Selenium Javascript執行器返回null

[英]Selenium Javascript executor returns null

通過Selenium JavascriptExecutor運行時,我有以下JavaScript代碼返回null 但是,在Firefox開發人員控制台中運行時,相同的代碼返回了一個值。

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

tmp();

以下是我的WebDriver代碼,JS與上面相同:

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

上面輸出null而不是“text”字符串。 有任何想法嗎?

你需要在executeScript()方法中使用return tmp()而不是tmp() 找到相關的參考driver.executeScript()為簡單的javascript返回NullPointerException

問題是你在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);

這應該打印您的預期值。

編輯:此外,您發布的代碼不會逃避[name='q']周圍的"" 這會結束字符串並導致語法錯誤。

您應該在jsExec.executeScript(...)返回的結果中添加一個return語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM