【发布时间】:2025-12-11 01:25:01
【问题描述】:
我是 Selenium 和 Java 的新手。我正在尝试实现 POM-PageFactory 模型。我的 testng 方法是启动 2 个 WebDriver 实例。
我有一个包含驱动程序对象的 BaseClass 和一个负责根据浏览器调用正确的 drive.exe 的 init 方法。 PageClass 是页面对象存储库,具有很少的实用方法。 TestClass 有测试方法。如果我在 TestClass 中调用 init 方法,我的代码就可以正常工作。但是我打算在 BaseClass 中调用。如果我这样做,则会创建 2 个驱动程序对象实例。请看下面的代码
public class BaseClass {
public static WebDriver driver;
public BaseClass() {
init("chrome");
//if init is invoked with in TestClass code is fine
//do not know what to do here if init call is removed
}
public void init(String browser) {
switch(browser) {// instantiate driver based on browser
case "chrome":
driver = new ChromeDriver();
break;
}
}
public void navigate(String url) {
//open website
}
}
public class PageClass extends BaseClass{
@FindBy()
WebElement searchTxtBox;
//other elements here
public PageClass() {
PageFactory.initElements(driver, this);
}
public void enterSearchText(){
//page specific methods
}
}
public class TestClass extends BaseClass {
PageClass page;
public TestClass() {
super();
}
@BeforeClass
public void launch() {
// init("chrome"); .....if init() moved to BaseClass
// then 2 instances of Chrome driver is launched
page = new PageClass();
}
@Test
public void searchForSomething()
{
navigate("https://google.com");
page.enterSearchString("Selenium");
page.clickSearchBtn();
}
}
【问题讨论】:
-
我打算将创建驱动程序的责任转移到 BaseClass。 TestClass 应该只处理启动 url 和只执行测试
-
找到它的简单方法是在测试开始时添加一个断点,运行它,然后逐行执行。然后,您将看到第二个浏览器实例何时生成并知道问题出在哪里。
标签: java selenium selenium-webdriver page-factory