更新版Firefox中Selenium3.8+NUnit3.9自动化驱动URL未更新问题
解决Firefox驱动URL链接未更新的问题
结合你的环境配置(VS 13、Selenium WebDriver 3.8.0、NUnit3TestAdapter 3.9.0)和代码,我来帮你梳理问题点并给出针对性解决方案:
先看代码里的核心问题
你当前的代码有两个关键问题会导致驱动URL链接异常:
- 局部驱动变量未绑定类成员:构造函数里创建的
FirefoxDriver driver是局部变量,没有赋值给类的driver成员。这会导致后续测试方法和quitDriver()里使用的driver不是你启动的那个浏览器实例,自然会出现链接异常。 - 重复配置冲突:同时用
FirefoxDriverService和环境变量设置webdriver.gecko.driver,两种配置方式可能互相干扰,导致驱动无法正确绑定通信URL。
具体修复步骤
1. 修正驱动初始化逻辑,绑定类成员变量
首先确保你的类里声明了类级别的IWebDriver成员,然后把初始化好的驱动赋值给它,替换局部变量的写法:
public class EmberJS_Accordion : NUnitUtil { string activeBrowser; IWebDriver driver; // 声明类级别的驱动成员 public EmberJS_Accordion(string browser) { // 初始化FirefoxDriverService,指定驱动所在目录 FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"C:\Drivers"); // 指定Firefox二进制文件路径 service.FirefoxBinaryPath = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe"; // 开启驱动日志(方便排查通信问题) service.LogPath = Path.Combine(Directory.GetCurrentDirectory(), "geckodriver.log"); service.EnableVerboseLogging = true; // 配置Firefox启动选项(禁用欢迎页等) FirefoxOptions options = new FirefoxOptions(); options.SetPreference("browser.startup.page", 0); options.SetPreference("browser.startup.homepage_override.mstone", "ignore"); // 初始化驱动并赋值给类成员 driver = new FirefoxDriver(service, options); activeBrowser = browser; } // 其余方法保持不变 }
2. 移除冗余的环境变量设置
既然已经通过FirefoxDriverService明确指定了驱动路径,就不需要再设置环境变量了,删掉这行代码:
// 移除这行重复配置 // System.Environment.SetEnvironmentVariable("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
3. 验证版本兼容性
Selenium 3.8.0对GeckoDriver的版本有要求,建议搭配GeckoDriver v0.19.0使用(对应Firefox 57-60版本)。如果你的Firefox是更新版本,可升级GeckoDriver到v0.24.0以内(避免和Selenium 3.8.0不兼容)。
4. 排查驱动通信日志
启动测试后,查看生成的geckodriver.log文件,里面会记录驱动和Firefox的通信细节。如果仍有URL绑定失败的错误,可以根据日志排查端口占用、权限等问题。
额外优化建议
- 替换
Thread.Sleep()为WebDriverWait,让等待更稳定:
// 替换Thread.Sleep(200) new WebDriverWait(driver, TimeSpan.FromMilliseconds(200)) .Until(d => d.FindElement(By.ClassName("cols-sample-area")).Displayed);
- 确保基类
NUnitUtil中的driver成员和你声明的类成员一致,避免冲突。
内容的提问来源于stack exchange,提问作者SivajiRaw
相关产品推荐
相关产品推荐

