我在使用宁静框架从PhantomJS驱动程序执行javascript时面临以下问题。
(PhantomJSDriver) driver).executeScript("document.getElementsById('whereOut')")
错误:
{"的errorMessage":"'未定义'不是一个功能(评估 ' document.getElementsById(' whereOut')')""请求" {"头" {&#34 ;接受编码":" gzip的,放气""连接":"保活"" Content-Length的&#34 ;: " 69""内容类型":"应用/ JSON; 字符集= UTF-8""主机":"本地主机:33819""用户代理":" Apache的HttpClient的/ 4.3 (java的 1.5)"}" httpVersion":" 1.1""方法":" POST""交& #34;:" {\"脚本\":\" document.getElementsById(\ u0027whereOut \ u0027)\" \" ARGS \&# 34;:[]}"" URL":" /执行"" urlParsed" {"锚":& #34;""查询":"""文件":"执行""目录&# 34;:" /""路径":" /执行""相对于":" /执行" "端口":"""主机":"""密码":" #&34;,"使用者":""" USERINFO":"""权威&#34 ;: """协议":"""源":" /执行"" queryKey":{},"大块":["执行"]}" urlOriginal":" /会话/ b0246730-4435-11e6 -b64c-7bf1e13a7577 /执行"}} 命令持续时间或超时:278毫秒
还尝试了以下代码:
((JavascriptExecutor) driver).executeScript("document.getElementById('whereOut')")
上面的代码返回一个空值,即使我添加一个返回值,如下所示:
((JavascriptExecutor) driver).executeScript("return document.activeElement")
返回空值。
是否有人尝试使用幻像js更改特定元素的css
?
((JavascriptExecutor) driver).executeScript("document.getElementById('whereOut').className=''")
我想到的是,在执行上面的代码行时,我没有使用javascript
执行元素,而使用纯selenium代码和firefox浏览器可以检索相同的元素。
P.S。我正在使用phantomJS 1.9.7版本以及宁静:1.0.56。
答案 0 :(得分:0)
尝试将executeAsyncScript
与callback
一起使用,如下所示: -
String changedClassName = ((JavascriptExecutor) driver).executeAsyncScript("var callback = arguments[arguments.length - 1];var element = document.getElementById('whereOut');element.setAttribute('class', 'your new class name');callback(element.getAttribute('class'));");
已修改: - 如果您要修改所需元素的className
,请尝试使用.setAttribute
,如下所示
WebElement element = driver.findElement(By.id("whereOut"));
String changedClassName = ((JavascriptExecutor) driver).executeAsyncScript("var callback = arguments[arguments.length - 1];arguments[0].setAttribute('class', arguments[1]);callback(arguments[0].getAttribute('class'));", element, "your new class name");
希望它会帮助你...... :)