-1

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

}
4

1 回答 1

0

对该方法的每次调用都会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.

于 2021-08-22T03:20:47.207 回答