ChromeDriver在Angular应用Selenium自动化中触发空指针异常问题
Angular自动化测试Chrome浏览器空指针异常排查
问题概述
- 自动化脚本在Microsoft Edge浏览器运行完全正常,但在Chrome浏览器中实例化ChromeDriver后,执行
driver.getTitle()时触发空指针异常 - 应用能成功启动,但获取页面标题操作失败
- 环境信息:
- Chrome版本:103
- Selenium版本:4.0.0-alpha-5
核心代码片段
System.out.println("Running in Chrome"); System.setProperty("webdriver.chrome.driver", "Drivers" + File.separator + "chromedriver.exe"); ChromeOptions Ioptions = new ChromeOptions(); Ioptions.addArguments("--start-maximized"); WebDriver driver = new ChromeDriver(Ioptions); driver.get(app_url); driver.getTitle();
异常栈信息
java.lang.NullPointerException at com.optum.taskTracker.ui.stepDefinitions.Hooks.takescreenshot(Hooks.java:269) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at cucumber.runtime.Utils$1.call(Utils.java:37) at cucumber.runtime.Timeout.timeout(Timeout.java:13) at cucumber.runtime.Utils.invoke(Utils.java:31) at cucumber.runtime.java.JavaHookDefinition.execute(JavaHookDefinition.java:60) at cucumber.runtime.Runtime.runHookIfTagsMatch(Runtime.java:223) at cucumber.runtime.Runtime.runHooks(Runtime.java:211) at cucumber.runtime.Runtime.runAfterHooks(Runtime.java:205) at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:46) at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.ExamplesRunner.run(ExamplesRunner.java:59) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.ScenarioOutlineRunner.run(ScenarioOutlineRunner.java:53) at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63) at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70) at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93) at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.api.junit.Cucumber.run(Cucumber.java:98) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:768) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
排查与解决建议
1. 版本兼容性修复
Selenium 4.0.0-alpha-5是早期测试版本,对Chrome 103的支持存在缺陷。
- 升级Selenium到稳定版(如4.1.x及以上)
- 确保ChromeDriver版本与Chrome浏览器版本严格匹配(Chrome 103对应ChromeDriver 103.x)
2. 添加页面加载等待
Angular应用渲染需要时间,直接调用driver.getTitle()时页面可能未完全加载:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.titleContains("预期标题关键词")); String title = driver.getTitle();
3. 修复截图钩子空指针
异常栈显示空指针来自Hooks.takescreenshot方法,需检查该方法中driver实例是否初始化:
public void takescreenshot() { if(driver != null) { // 执行截图逻辑 } }
4. 验证ChromeDriver路径
确认ChromeDriver路径正确性及文件权限:
String driverPath = "Drivers" + File.separator + "chromedriver.exe"; System.out.println("ChromeDriver路径:" + driverPath); File driverFile = new File(driverPath); System.out.println("文件是否存在:" + driverFile.exists());
内容的提问来源于stack exchange,提问作者Little bird
相关产品推荐
相关产品推荐

