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

时间:2015-02-18 15:39:01

标签: 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.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来引用当前文档。注意   一旦脚本具有,局部变量将不可用   完成执行,但全局变量将持续存在。

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

1 个答案:

答案 0 :(得分:3)

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

jsc.executeScript("window.test = false;");
String testVal = jsc.executeScript("return window.test;").toString

它也可能是executeAsyncSript()的用例,请参阅: