我有登录表单,我需要使用正确和错误的凭据对其进行测试。
在输入登录名和密码后,单击“登录”按钮,网站将对其进行处理10秒钟。
如果凭据确定,将显示mainPage.menu WebElement。
如果凭据错误-不显示mainPage.menu WebElement。 登录页面可能会刷新,或者(并非总是)会显示错误消息。
如何在测试中检查它?
要获得正确的凭据,请进行测试:
http://<user_gitlab>@ip_gitlab_server/example.git
对于错误的凭据,测试失败并带有异常,因为无法建立mainPage.menu:
Assert.assertEquals(true, mainPage.menu.isDisplayed());
如果我插入“断言”“登录”按钮,则测试将始终成功,因为在任何情况下(任何凭据)在开始的10秒钟内都会显示“登录”。 当然,如果我将Thread.sleep放入,它将解决问题。 但是,这不是一个好习惯。
答案 0 :(得分:1)
问题在这里
Assert.assertEquals(false, mainPage.menu.isDisplayed());
如果凭据错误,则mainPage.menu
将不可用,这将导致异常。因此需要处理。请使用try/catch
boolean displayed=false;
try {
mainPage.menu.isDisplayed();
displayed=true;
}catch (Exception e) {
//element not displayed
//displayed is false
}
Assert.assertEquals(false, mainPage.menu.isDisplayed());
答案 1 :(得分:1)
尽管此答案将满足您的要求,但理想情况下,有效和无效登录名应在单独的测试用例中进行验证。此外,避免引用诸如 true 在<{3}}下为 mainPage.menu 的项目。
理想的验证候选者可以是:
根据您的用例,您需要按以下步骤引入try-catch{}
块:
try{
Assert.assertEquals(true, <placeholder_of_welcome_message>.isDisplayed());
}catch (NoSuchElementException e) {
Assert.assertEquals(true, <placeholder_of_error_message>.isDisplayed());
}
此外,您可能需要按以下步骤诱导 WebDriverWait :
try{
Assert.assertEquals(true, new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.id("welcome_message_element_id"))));
}catch (NoSuchElementException e) {
Assert.assertEquals(true, new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.id("error_message_element_id"))));
}