![](/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.