使用静态

时间:2016-07-07 12:10:43

标签: javascript java selenium phantomjs ghostdriver

我在使用宁静框架从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。

1 个答案:

答案 0 :(得分:0)

尝试将executeAsyncScriptcallback一起使用,如下所示: -

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");

希望它会帮助你...... :)