AssertionError trying to check dashboard URL is opened after login

AssertionError trying to check dashboard URL is opened after login

我是 selenium 的新手,我尝试登录并检查仪表板 URL 是否打开,但每次都出现 java.lang.AssertionError。请帮助我了解我做错了什么。我尝试比较应该是我的仪表板 URL 的当前 URL 是否等于 expURL。这是我的代码:

//test  
    @Test
    public static void LoginPage(){
        PageLogin loginPage = new PageLogin(driver);

        driver.get("http://37.252.65.134:8885/#/core/login");

        loginPage.enterCredentials("Apollo", "123");

        loginPage.clickOnLogin();

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        result = PageLogin.validateURL(driver,"http://37.252.65.134:8885/#/app/dashboard");
        Assert.assertTrue(result);   
        }   

//page object 

package LoginPage;

public class PageLogin {
   WebDriver driver;

  //locators

   @FindBy(how = How.XPATH, using = "//input[contains(@type,'text')]")
   private WebElement username;

   @FindBy(how = How.XPATH, using = "//input[contains(@type,'password')]")
   private WebElement password;

   @FindBy(how = How.XPATH, using = "//button[contains(.,'login')]")
   private WebElement loginbutton;


   //Constructor
   public PageLogin(WebDriver driver){
       this.driver = driver;

         PageFactory.initElements(driver, this);
   }

   public void enterCredentials(String username, String password){
       this.username.clear();
       this.username.sendKeys(username);

       this.password.clear();
       this.password.sendKeys(password);           
   }

   public void clickOnLogin(){

       this.loginbutton.click();

       driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
       }

    public static boolean validateURL (WebDriver driver, String expURL) {
        boolean result = false;
        if (driver.getCurrentUrl().equalsIgnoreCase(expURL))
        {
            result = true;
            System.out.println("Login Success");                        
        }
                return result;          
    }   
}

您看到的错误说明了一切:

java.lang.AssertionError

这个错误肯定很早以前就被诊断出来了,因为你的程序没有打印 登录成功 根据行:

System.out.println("Login Success");   

主要原因是同步问题,由于if()的条件不满足,result = false 返回。

解决方案

解决方案是等待 getCurrentUrl() 到 contain/tobe/match http://37.252.65.134:8885/#/app/dashboard。为此,您可以使用 ExpectedConditions of WebDriverWait 选项中的任一子句,如下所示:

一旦建立了新的 url,您就可以在 for() 循环中验证结果:

new WebDriverWait(driver, 20).until(ExpectedConditions.urlContains("37.252.65.134:8885"));
if (driver.getCurrentUrl().equalsIgnoreCase(expURL))