运行 通过 webdriver 管理器测试时打开多个浏览器实例

Multiple instances of browser opening up when running test through webdriver manager

我是 Selenium 的新手,所以基本上每当我 运行 我的测试时,它都会打开我在测试中提到的 URL 。在我的同一个测试中,我还提到填写用户名和密码。

但不知何故,一旦浏览器启动并重定向到 URL,它会打开另一个空白浏览器实例,使我的脚本无法找到该元素。

请帮帮我。 //////////////////////////////////////////////// ////////////////////////

public class TruefillTest extends BaseClass  {


  public Truefill truefill()
  {
    WebDriver driver=InitializeDriver();
      return new Truefill(driver);
  }


@Test
    public void userLoginIntoTheSystem()
    {
        truefill().dashBoard().Url();
        truefill().dashBoard().EnterUsername("bjdgfe@swcwr.com");
        truefill().dashBoard().EnterPassword("Test1234");
    }
///////////////////////////////////////////////

public class Truefill  {
   private WebDriver driver;

    public Truefill(WebDriver driver) {
        this.driver=driver;
    }

  
    public DashBoardPage dashBoard()
    {
        return new DashBoardPage(driver);
    }


////////////////////////////////////////////////////////////
public class DashBoardPage  {
    
        private final WebDriver driver;
        By Username= By.xpath("//input[@name='name']");
        By Password= By.xpath("//input[contains(@id,'exampleInputPassword1')]");
    
    
        public DashBoardPage(WebDriver driver) {
            this.driver=driver;
        }
        public void Url()
        {
            driver.get("https://rahulshettyacademy.com/angularpractice/");
        }
        public void EnterUsername(String username)
        {
            driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
            driver.findElement(Username).sendKeys(username);
    
    
    
        }
        public void EnterPassword(String password)
        {
            driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
            driver.findElement(Password).sendKeys(password);
        }

////////////////////////////////////////////////////////////
public class BaseClass {
    WebDriver driver;

public WebDriver InitializeDriver()
{

    WebDriverManager.chromedriver().setup();
     driver = new ChromeDriver();
    return driver;
}

}

每次调用 truefill() 方法都会初始化一个新的 WebDriver 实例。由于您的测试多次调用它,它会在每一行启动一个新的浏览器实例。相反,将 DashboardPage 存储在局部变量中:

@Test
public void userLoginIntoTheSystem() {
    DashBoardPage dashBoardPage = truefill().dashBoard();
    dashBoardPage.Url();
    dashBoardPage.EnterUsername("bjdgfe@swcwr.com");
    dashBoardPage.EnterPassword("Test1234");
}

您可能还想使用设置方法来初始化 Truefill 实例,而不是按需创建它:

private Truefill truefill;

@BeforeEach
public void  initializeTruefill() {
    WebDriver driver = InitializeDriver();
    truefill = new Truefill(driver);
}


@Test
public void userLoginIntoTheSystem() {
    DashBoardPage dashBoardPage = truefill.dashBoard();
    dashBoardPage.Url();
    dashBoardPage.EnterUsername("bjdgfe@swcwr.com");
    dashBoardPage.EnterPassword("Test1234");
}

这假定 JUnit 5。如果您使用的是 JUnit 4,注释是 @Before 而不是 @BeforeEach