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



我是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");
}

您可能还想使用setup方法来初始化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

相关内容

最新更新