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

Java 尝试检查仪表板URL的AssertionError在登录后打开,java,selenium,assert,assertions,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("htt

我是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()
包含/tobe/match
http://37.252.65.134:8885/#/app/dashboard
。为了实现这一目标,您可以使用以下选项中的任一条款:

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

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

看起来您期望的URL和您得到的URL不一样,这就是抛出断言错误的原因。您在validateURL方法中得到了哪个URL?可能是方法
validateURL()
仍在
driver.getCurrentUrl()
处获得登录URL。您所要做的就是等待仪表板完全加载。您可以使用显式等待,如
WebDriverWait
。您可以尝试在比较URL之前添加此代码来修复它
WebDriverWait wait=new WebDriverWait(driver,30);等待.直到(ExpectedConditions.stalenessOf(loginButton))非常感谢,我会尽力的that@Renato,现在它给出了另一个错误:无法定位元素://button[contains(,'login')],但我认为问题是没有识别stalenessOf,它说“这个元素既没有附加源代码也没有附加Javadoc,因此找不到Javadoc。”@TatevikMelikyan尝试在单击登录按钮后立即使用这段代码。如果仍然不起作用,请使用
ExpectedConditions
类中的另一个条件来等待仪表板页面中的元素,否则,在比较时发布您从
driver.getCurrentUrl()
中获得的URL。感谢它发挥了很大的作用,我使用了这个预期条件等待(ExpectedConditions.invisibilityOfElementLocated(By.xpath(“”));
new WebDriverWait(driver, 20).until(ExpectedConditions.urlToBe("http://37.252.65.134:8885/#/app/dashboard"));
new WebDriverWait(driver, 20).until(ExpectedConditions.urlContains("37.252.65.134:8885"));
if (driver.getCurrentUrl().equalsIgnoreCase(expURL))