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 选项中的任一子句,如下所示:
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))
我是 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 选项中的任一子句,如下所示:
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))