![](/img/trans.png)
[英]Selenium JavaScript Executor returns null for .checked but works for .click()?
[英]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.