You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TestNG+Selenium Java跨浏览器启动失败问题求助

解决TestNG跨浏览器测试中Chrome无法启动及参数缺失问题

让我来帮你排查这两个问题,我看了你的代码、配置和报错信息,找到了几个关键问题点,下面逐个解决:

问题1:直接运行类文件时的参数缺失报错

当你直接运行VerifyTitle类时,TestNG没办法读取testng.xml里配置的browser参数,而你的browsers方法通过@Parameters({"browser"})声明了必填参数,但没有标记@Optional,所以TestNG会抛出参数缺失的异常。

修复方案

给参数添加@Optional注解并指定一个默认值(比如默认用chrome),这样直接运行类时也能正常执行:

@Test(priority = 2)
@Parameters({"browser"})
public void browsers(@Optional("chrome") String browsername) {
    // 原方法逻辑保持不变
}

不过更建议你跨浏览器测试统一通过testng.xml执行,这个修改只是为了避免直接运行类时报错。

问题2:通过XML运行时Chrome启动后测试失败

从日志可以看到ChromeDriver已经成功启动了,但测试最终失败,核心原因有两个:

2.1 URL缺少协议头

你代码里写的driver.get("www.yahoo.com");没有指定http://或https://协议头,Selenium会把这个地址当作相对路径处理,导致浏览器无法正确导航到Yahoo网站,进而触发测试失败。

修复方法

修改URL为带协议头的完整地址:

driver.get("https://www.yahoo.com");

2.2 ChromeDriver与Chrome浏览器版本不兼容

你使用的ChromeDriver版本是2.36,这个版本非常老旧,仅支持Chrome 63-65版本。如果你的Chrome是较新的版本(比如110+),两者版本不兼容会导致浏览器启动后无响应或崩溃,最终测试失败。

修复方法

  1. 打开Chrome浏览器,通过「设置→关于Chrome」查看当前浏览器版本
  2. 下载对应版本的ChromeDriver(注意:ChromeDriver大版本要和Chrome一致,比如Chrome 118.x对应ChromeDriver 118.x)
  3. 替换你项目中Drivers/Windows目录下的chromedriver.exe文件

可选优化:添加资源清理

为了避免浏览器进程残留,建议在测试结束后关闭浏览器,添加一个@AfterMethod注解的方法:

import org.testng.annotations.AfterMethod;

// ... 其他代码 ...

@AfterMethod
public void tearDown() {
    if (driver != null) {
        driver.quit();
    }
}

修改后的完整代码

package corssBrowsers; 
import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

public class VerifyTitle { 
    WebDriver driver; 

    @Test(priority=1) 
    public void sam() { 
        System.out.println("Hello sam"); 
    } 

    @Test(priority = 2) 
    @Parameters({"browser"}) 
    public void browsers(@Optional("chrome") String browsername) { 
        System.out.println(browsername); 
        if(browsername.equalsIgnoreCase("chrome")) { 
            System.out.println("You have selected " + browsername); 
            System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "\\Drivers\\Windows\\chromedriver.exe"); 
            driver = new ChromeDriver(); 
        } else { 
            System.out.println("You have not selected chrome"); 
        } 
        driver.manage().window().maximize(); 
        driver.get("https://www.yahoo.com"); 
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    } 

    @AfterMethod
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

按照以上步骤修改后,重新通过testng.xml运行测试,Chrome应该能正常启动并完成测试,直接运行类时也不会再出现参数缺失的报错了。

内容的提问来源于stack exchange,提问作者Sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:25:28