public class UserAccessFrontendTest {
static TestUser sharedUser = new TestUser("ivan.petrov", "user123", "USER");
static WebDriver driver;
@BeforeAll
static void setUpClass() {
driver = new ChromeDriver();
driver.get("https://frontend.example.com/login");
}
@AfterAll
static void tearDownClass() {
driver.quit();
}
@Test
@Order(1)
@DisplayName("Успешный логин, отображается дашборд")
void testUserCanLogin() {
driver.findElement(By.id("username")).sendKeys(sharedUser.getLogin());
driver.findElement(By.id("password")).sendKeys(sharedUser.getPassword());
driver.findElement(By.cssSelector(".btn-submit")).click();
assertFalse(driver.findElement(By.cssSelector(".btn-submit")).isDisplayed());
}
@Test
@Order(2)
@DisplayName("Неуспешная попытка входа, пользователь блокируется после 3й попытки, вход запрещен")
void testUserIsBlockedAfterFailedAttempts() {
// 3 неуспешные попытки входа
for (int i = 0; i < 3; i++) {
driver.findElement(By.id("username")).sendKeys(sharedUser.getLogin());
driver.findElement(By.id("password")).sendKeys("wrong_password");
driver.findElement(By.cssSelector(".btn-submit")).click();
}
sharedUser.setBlocked(true);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
driver.findElement(By.cssSelector(".btn-submit")).click();
WebElement errorMsg = driver.findElement(By.xpath("/html/body/div[2]/div[1]/div/span"));
assertTrue(errorMsg.isDisplayed());
}
// Вспомогательный класс пользователя для тестов
static class TestUser {
private String login;
private String password;
private String role;
private boolean blocked;
public TestUser(String login, String password, String role) {
this.login = login;
this.password = password;
this.role = role;
this.blocked = false;
}
public String getLogin() { return login; }
public String getPassword() { return password; }
public String getRole() { return role; }
public void setRole(String role) { this.role = role; }
public boolean isBlocked() { return blocked; }
public void setBlocked(boolean blocked) { this.blocked = blocked; }
}
}