我需要达到以下方案:
1)使用JavascriptExecutor初始化JS var,指示是否已完成某些操作。
2)使用渲染器页面进行一些普通的操作。
3)验证对点(1)中创建的var的更改。
例如:
jsc.executeScript("var test = false;");
现在,完成了一些操作。 然后:
String testVal = jsc.executeScript("return test;").toString
我收到错误:
org.openqa.selenium.WebDriverException:{" errorMessage":"无法找到 变量:test"," request":{" headers":{" Accept":" application / json, 图像/ PNG""连接":"保活"" Content-Length的":" 35"&#34 ;内容类型":"应用/ JSON; 字符集= UTF-8""主机":"本地主机:14025"}" httpVersion":" 1.1",& #34;方法":" POST""后":" {\" ARGS \":[],\&#34 ;脚本\":\"回报 测试; \"}"" URL":" /执行"" urlParsed" {"锚" :"""查询":"""文件":"执行""目录":" /""路径":" /执行""相对于":" /执行&# 34;,"端口":"""主机":"""密码":&# 34;""使用者":""" USERINFO":"""权威&#34 ;:"""协议":"""源":" /执行"&# 34; queryKey":{},"大块":["执行"]}" urlOriginal":" /会话/ 7e2c8ab0-b781 -11e4-8a54-6115c321d700 /执行"}}
当我在同一个执行中运行它们时,它可以正常工作。
String testVal = jsc.executeScript("var test = false; return test;").toString;
从JavascriptExecutor doc我找到了我需要的解释:
在脚本中,使用document来引用当前文档。注意 一旦脚本具有,局部变量将不可用 完成执行,但全局变量将持续存在。
我的替代/解决方法是什么?
答案 0 :(得分:3)
不确定它背后的动机是什么,但您可以使用全局可用的window
对象:
jsc.executeScript("window.test = false;");
String testVal = jsc.executeScript("return window.test;").toString
它也可能是executeAsyncSript()
的用例,请参阅: