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 对象。