我是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;
}
}
答案 0 :(得分:0)
您看到的错误说明了一切:
java.lang.AssertionError
由于您的程序未按照以下行打印登录成功,因此错误必须已经过多次诊断:
System.out.println("Login Success");
主要原因是同步问题,并且if()
的条件并不满足,并且 result = false
会被返回。
解决方案是等待 getCurrentUrl()
包含/匹配 http://37.252.65.134:8885/#/app/dashboard
。为此,您可以使用ExpectedConditions个WebDriverWait选项中的任何一个条款,如下所示:
urlContains(java.lang.String fraction)
new WebDriverWait(driver, 20).until(ExpectedConditions.urlContains("37.252.65.134:8885"));
new WebDriverWait(driver, 20).until(ExpectedConditions.urlToBe("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))