运行 通过 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
。
我是 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
。