Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Javascript执行器返回null_Javascript_Selenium_Nullpointerexception_Selenium Webdriver - Fatal编程技术网

Selenium Javascript执行器返回null

Selenium Javascript执行器返回null,javascript,selenium,nullpointerexception,selenium-webdriver,Javascript,Selenium,Nullpointerexception,Selenium Webdriver,当通过SeleniumJavascriptExecutor运行时,我有以下JavaScript代码返回null。但是,在Firefox开发者控制台中运行的相同代码返回了一个值 函数tmp(){ var attrb=jQuery(jQuery(“[name='q']”)[0]).attr('type'); if(类型属性!='undefined'&&attrb!==false){ 返回属性B; }否则{ 返回“”; } } tmp(); 下面是我与JS的WebDriver代码,与上面相同: Ja

当通过Selenium
JavascriptExecutor
运行时,我有以下JavaScript代码返回
null
。但是,在Firefox开发者控制台中运行的相同代码返回了一个值

函数tmp(){
var attrb=jQuery(jQuery(“[name='q']”)[0]).attr('type');
if(类型属性!='undefined'&&attrb!==false){
返回属性B;
}否则{
返回“”;
}
}
tmp();
下面是我与JS的WebDriver代码,与上面相同:

JavascriptExecutor jsExec=(JavascriptExecutor)驱动程序;
对象类型=
executeScript(“函数tmp(){…}tmp();”;
System.out.println(“类型:”+inpType);

上面输出的是
null
,而不是“text”字符串。有什么想法吗

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

您需要在executeScript()方法中使用return tmp()而不是tmp()。 查找相关参考资料
您应该在要从
jsExec内部返回的结果中添加
return
语句。executeScript(…)

已经在上面添加了我的selenium代码,请查看。谢谢。感谢您的回复。我确实在前面内联了所有内容,但它导致firefox返回一个错误,上面写着“return not in a function”(返回不在函数中),这就是我将此代码段移动到函数tmp()中并调用它的原因。说到引文,上面是一个打字错误。脚本是在代码中转义为“”的地方动态生成的,为了简单起见,我将上述javascript复制到函数调用中。@Jsm
executeScript()
可以有一个返回语句,并且不会引发错误。为什么不直接将函数内联用于
executeScript()
,并封装在一个函数中,用于直接进入Firefox?这是可行的,但将代码段粘贴到浏览器控制台后,会抛出此错误“Uncaught SyntaxError:非法返回语句”。