Selenium Javascript执行器返回null

Selenium Javascript executor returns null

本文关键字:返回 null 执行 Javascript Selenium      更新时间:2023-09-26

当运行Selenium JavascriptExecutor时,我有以下返回null的JavaScript代码。然而,在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

您应该将return语句添加到要从jsExec.executeScript(...) 内部返回的结果

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