geckodriver - 无法创建 js 变量然后读取它?
geckodriver - cannot create a js variable then read it?
我正在使用 geckodriver.exe 通过 Firefox 进行一些 Selenium 自动化。有时我需要使用 ExecuteScript 创建一个全局变量,然后稍后读取该变量:
driver.ExecuteScript(" x = 'test'; ");
var result = driver.ExecuteScript(" return x; ");
在 ChromeDriver 中,我得到了一个结果,它是预期的“测试”。
使用 GeckoDriver,我在第二次调用时得到 null。我做错了什么吗?我真的打算在这里创建一个全局变量!
您的解决方案不起作用似乎有点奇怪。您可以利用 Javascript 的怪癖,在 window 对象上设置 属性 会创建 implicitly declared global variable:
var js = (IJavaScriptExecutor)driver;
js.ExecuteScript("window.x = 'test';");
在处理 <frameset>
或 <iframe>
时,您可以参考 top
在顶级 window 对象中设置全局变量:
js.ExecuteScript("top.x = 'test';");
我的猜测是您尝试的代码设置了一个全局变量,而不是您认为的 window 对象。
我正在使用 geckodriver.exe 通过 Firefox 进行一些 Selenium 自动化。有时我需要使用 ExecuteScript 创建一个全局变量,然后稍后读取该变量:
driver.ExecuteScript(" x = 'test'; ");
var result = driver.ExecuteScript(" return x; ");
在 ChromeDriver 中,我得到了一个结果,它是预期的“测试”。
使用 GeckoDriver,我在第二次调用时得到 null。我做错了什么吗?我真的打算在这里创建一个全局变量!
您的解决方案不起作用似乎有点奇怪。您可以利用 Javascript 的怪癖,在 window 对象上设置 属性 会创建 implicitly declared global variable:
var js = (IJavaScriptExecutor)driver;
js.ExecuteScript("window.x = 'test';");
在处理 <frameset>
或 <iframe>
时,您可以参考 top
在顶级 window 对象中设置全局变量:
js.ExecuteScript("top.x = 'test';");
我的猜测是您尝试的代码设置了一个全局变量,而不是您认为的 window 对象。