当我在Firefox 28.0上运行Selenium测试时,我得到:
"类型为'OpenQA.Selenium。WebDriverException'发生在WebDriver.dll中,但未在用户代码中处理
附加信息:无法使用注册表确定FireFox的当前版本,请确保您已正确安装FireFox "
我昨天用Firefox成功地进行了测试。
我想Firefox昨天已经自动更新到28.0了。
今天我得到了上面的错误。
我卸载Firefox并重新安装,但我仍然得到相同的异常。
2.40硒Firefox 28.0Gallio and MbUnit 3.4
对如何修复有什么想法吗?我想我可以切换到IE进行测试。
爱德在调用FireFoxBinary()构造函数时生成错误。
DriverObj = New FirefoxDriver(New FirefoxBinary(), New FirefoxProfile(), TimeSpan.FromMinutes(10))
对FirefoxBinary的调用工作了三个星期,所以我不确定为什么它昨天决定失败。也许是因为Firefox从27到28的自动更新。
解决方案是将文件路径添加到Firefox二进制文件中: DriverObj = New FirefoxDriver(New FirefoxBinary("C:Program Files (x86)Mozilla FirefoxFirefox.exe"), New FirefoxProfile(), TimeSpan.FromMinutes(10))
一个可能的解决方案是手动添加正在搜索的注册表项。正常的FireFox构建(非ESR)似乎会在
中放置一个名为"CurrentVersion"的键,其中包含版本的字符串值。HKEY_LOCAL_MACHINE Mozilla软件 Wow6432Node Mozilla FireFox
目录。测试表明,当我在这个位置放置一个类似的键,但是在我的系统上安装了ESR版本的字符串值时,Selenium将工作。需要注意的是,由于这个问题相当古老,我已经用Selenium 3.0.1进行了测试。如果您想尝试这样做,您的注册表项应该像这样,不带引号:
Name = "CurrentVersion" and
Value = "45.6.0 ESR (x86 en-US)"
请记住,这个解决方案可以让你在紧要关头,但每次ESR更新时,你都需要进入并更新键值
这让我很抓狂,直到我最终破解了它,下面是修复我的代码:
var options = new FirefoxOptions();
options.BrowserExecutableLocation = @"C:Program Files (x86)Mozilla Firefoxfirefox.exe";
IWebDriver driver = new FirefoxDriver(options);