0

我正在使用 geckodriver.exe 通过 Firefox 进行一些 Selenium 自动化。有时我需要使用 ExecuteScript 创建一个全局变量,然后再读取该变量:

driver.ExecuteScript("  x = 'test'; ");
var result = driver.ExecuteScript("  return x; ");

在 ChromeDriver 中,我得到了一个结果,它是预期的“测试”。

使用 GeckoDriver,我在第二次通话中得到空值。有什么我做错了吗?我真的打算在这里创建一个全局变量!

4

1 回答 1

1

您的解决方案不起作用似乎有点奇怪。您可以利用 Javascript 的一个怪癖,在窗口对象上设置属性会创建一个隐式声明的全局变量

var js = (IJavaScriptExecutor)driver;

js.ExecuteScript("window.x = 'test';");

处理 a <frameset>or时,<iframe>您可以参考top在顶层窗口对象中设置全局变量:

js.ExecuteScript("top.x = 'test';");

我的猜测是您尝试的代码设置了一个全局变量,而不是您认为的窗口对象。

于 2021-10-05T00:41:36.770 回答