如何在Java@Test方法执行前获取webdriver.base.url及环境参数?
解决@Test方法执行前获取webdriver.base.url的问题
方案1:调整PageObject类的方法访问权限
- 直接修改PageObject类中
getBaseUrl()的访问修饰符,从private改为public或protected,测试类就能直接调用:
// PageObject类修改后 public String getBaseUrl() { return this.webdriverBaseUrl; } // 测试类中在@Test执行前获取(比如用@BeforeEach注解) @BeforeEach void setup() { PageObject page = new PageObject(); String baseUrl = page.getBaseUrl(); // 后续业务逻辑使用baseUrl }
- 若不想改动原方法权限,可在PageObject类新增一个公共方法封装私有调用:
// PageObject类新增方法 public String getWebDriverBaseUrl() { return getBaseUrl(); }
方案2:直接读取系统属性或环境配置
既然通过Jenkins传入了-Denvironment=preproduction参数,webdriver.base.url应该是和环境绑定的配置,可以绕过PageObject直接读取:
- 直接读取系统属性(如果
webdriver.base.url是通过系统参数传递的):
@BeforeEach void setup() { String baseUrl = System.getProperty("webdriver.base.url"); }
- 按环境加载配置文件(更灵活):
@BeforeEach void setup() { String env = System.getProperty("environment", "preproduction"); Properties configProps = new Properties(); try (InputStream inputStream = getClass().getResourceAsStream("/config/" + env + ".properties")) { configProps.load(inputStream); String baseUrl = configProps.getProperty("webdriver.base.url"); } catch (IOException e) { e.printStackTrace(); } }
方案3:反射调用私有方法(不推荐)
如果无法修改PageObject代码,可通过反射强行访问私有方法,但这种方式耦合性高,后续代码变更易引发问题:
@BeforeEach void setup() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { PageObject page = new PageObject(); Method baseUrlMethod = PageObject.class.getDeclaredMethod("getBaseUrl"); baseUrlMethod.setAccessible(true); String baseUrl = (String) baseUrlMethod.invoke(page); }
内容的提问来源于stack exchange,提问作者Calin_m
相关产品推荐
相关产品推荐

