使用SeleniumWebDriver JavascriptExecutor在单独的脚本中操作一个JS变量
我需要达到以下场景: 1) 使用JavascriptExecutor初始化JS var,这将指示是否完成了某些操作 2) 对渲染器页面执行一些普通操作 3) 验证对第(1)点中创建的var的更改 例如:使用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
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()
的一个用例,请参见:
window.test=false代码>根据当前的驱动程序注册测试变量
?@Saifur我认为它在当前浏览器窗口的“范围”内-因此,基本上,您可以说它在当前webdriver会话的范围内。请投票表决一个有趣的问题。可能重复