Selenium Javascript执行器返回null

时间:2013-07-28 17:05:22

标签: javascript selenium nullpointerexception selenium-webdriver

通过Selenium null运行时,我有以下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();

下面是我的WebDriver代码,JS与上面相同:

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

高于输出null而不是“text”字符串。有任何想法吗?

2 个答案:

答案 0 :(得分:17)

您需要在executeScript()方法中使用 return tmp()而不是 tmp()。 找到相关的参考 driver.executeScript() returns NullPointerException for simple javascript

答案 1 :(得分:1)

问题是您在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']。这会结束字符串并导致语法错误。