如何在WebDriver+Java+JUnit的POM模式下统一配置域名参数并测试
当然可以!这种场景下,我们的核心思路是把域名这类全局配置抽离出来,让所有页面和测试类共享同一个数据源,这样只需要修改一处就能切换整个测试套件的运行域名。下面给你两种最常用的实现方案,适配不同的复杂度需求:
方案1:全局常量类(简单直接,适合快速实现)
这种方式适合不需要频繁切换多环境的场景,只需要创建一个统一的配置类存放常量:
- 创建全局配置类
public class TestConfig { // 仅需修改这一处,所有引用的地方都会同步生效 public static final String DOMAIN = "http://testdomain.com"; }
- 修改页面类,通过构造方法接收域名
以你的PageLogin为例:
public class PageLogin { private WebDriver driver; private String domain; // 构造方法注入域名 public PageLogin(WebDriver driver, String domain) { this.driver = driver; this.domain = domain; } public void goToLoginPage() { // 使用统一域名拼接页面路径 driver.get(domain + "/login"); } // 其他登录相关方法... }
- 测试类引用全局常量
public class LoginTest { public static WebDriver driver; public static PageLogin login; public static PageMain main; @BeforeClass public static void setup() { driver = new ChromeDriver(); // 从全局配置获取域名,传递给页面实例 login = new PageLogin(driver, TestConfig.DOMAIN); main = new PageMain(driver, TestConfig.DOMAIN); } @Test public void testSuccessfulLogin() { login.goToLoginPage(); // 执行登录测试逻辑... } }
方案2:配置文件(灵活适配多环境)
如果需要频繁在测试、预发、生产等环境间切换,用配置文件会更优雅,不需要修改代码:
- 创建配置文件
在src/main/resources或src/test/resources下新建test-config.properties:
# 测试环境 domain=http://testdomain.com # 预发环境(需要切换时注释上面,打开下面) # domain=http://stagingdomain.com # 生产环境 # domain=http://productiondomain.com
- 创建配置读取类
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class TestConfig { private static final Properties props = new Properties(); static { // 静态代码块初始化时加载配置文件 try (InputStream inputStream = TestConfig.class.getClassLoader().getResourceAsStream("test-config.properties")) { if (inputStream == null) { throw new RuntimeException("未找到配置文件 test-config.properties"); } props.load(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 提供获取域名的方法 public static String getDomain() { return props.getProperty("domain"); } }
- 页面和测试类调用配置方法
和方案1类似,只是把TestConfig.DOMAIN换成TestConfig.getDomain()即可,比如测试类的setup方法:
@BeforeClass public static void setup() { driver = new ChromeDriver(); String domain = TestConfig.getDomain(); login = new PageLogin(driver, domain); main = new PageMain(driver, domain); }
额外优化:BaseTest统一初始化
为了避免每个测试类都重复写driver和页面实例的初始化逻辑,可以创建一个父类:
public class BaseTest { protected static WebDriver driver; protected static PageLogin loginPage; protected static PageMain mainPage; @BeforeClass public static void setupBase() { driver = new ChromeDriver(); String domain = TestConfig.getDomain(); loginPage = new PageLogin(driver, domain); mainPage = new PageMain(driver, domain); } @AfterClass public static void teardownBase() { if (driver != null) { driver.quit(); } } }
之后所有测试类只需要继承BaseTest即可,不用重复初始化:
public class LoginTest extends BaseTest { @Test public void testLoginFlow() { loginPage.goToLoginPage(); // 测试逻辑... } }
这样整个测试套件的域名配置就完全统一了,切换环境只需要修改TestConfig类的常量或者配置文件的一行内容即可。
内容的提问来源于stack exchange,提问作者Daria
相关产品推荐
相关产品推荐

