尝试检查仪表板URL的AssertionError在登录后打开

时间:2018-02-17 18:07:29

标签: java selenium assert assertions

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

1 个答案:

答案 0 :(得分:0)

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

java.lang.AssertionError

由于您的程序未按照以下行打印登录成功,因此错误必须已经过多次诊断:

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

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

解决方案

解决方案是等待 getCurrentUrl() 包含/匹配 http://37.252.65.134:8885/#/app/dashboard 。为此,您可以使用ExpectedConditionsWebDriverWait选项中的任何一个条款,如下所示:

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

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