使用SeleniumWebDriver JavascriptExecutor在单独的脚本中操作一个JS变量

使用SeleniumWebDriver JavascriptExecutor在单独的脚本中操作一个JS变量,java,selenium,selenium-webdriver,webdriver,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Webdriver,Selenium Chromedriver,我需要达到以下场景: 1) 使用JavascriptExecutor初始化JS var,这将指示是否完成了某些操作 2) 对渲染器页面执行一些普通操作 3) 验证对第(1)点中创建的var的更改 例如: jsc.executeScript("var test = false;"); 现在,进行了一些操作。 然后: String testVal = jsc.executeScript("return test;").toString 我得到一个错误: org.openqa.selenium.W

我需要达到以下场景:

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,“连接”:“保持活动状态”,“内容长度”:“35”,“内容类型”:“应用程序/json”; charset=utf-8,“主机”:“localhost:14025”},“httpVersion”:“1.1”,“方法”:“POST”,“POST”:“{\”args\”:[],\“脚本\”:\”返回 测试;\“}”、“url”:“/execute”、“urlParsed”:“{”anchor:“,”query:“,”file:“,”execute“,”directory:“,”path:”execute“,”relative:”execute“,”port:“,”host:”password:“,”user:”userInfo:“,”authority:“,”protocol:“,”source:“:”execute:“,”queryKey:“{},”chunks:“[”execute”,”urlOriginal:“/会话/7e2c8ab0-b781-11e4-8a54-6115CD700/执行”}

当我在同一执行中运行它们时,它工作正常:

   String testVal = jsc.executeScript("var test = false; return test;").toString;
从中我找到了我需要的解释:

在脚本中,使用文档引用当前文档。注 一旦脚本启动,局部变量将不可用 已完成执行,但全局变量将保持不变


我的替代方案/解决方法是什么?

不确定其背后的动机是什么,但您可以使用全局可用的
窗口
对象:

jsc.executeScript("window.test = false;");
String testVal = jsc.executeScript("return window.test;").toString
它也可能是
executeAsyncScript()
的一个用例,请参见:


谢谢,这正是我需要的@alecxe So,
window.test=false根据当前的
驱动程序注册
测试
变量
?@Saifur我认为它在当前浏览器窗口的“范围”内-因此,基本上,您可以说它在当前webdriver会话的范围内。请投票表决一个有趣的问题。可能重复