import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class AccountLockoutTest {
public static void main(String[] args) {
// Configurar o caminho do ChromeDriver (substitua pelo caminho correto)
System.setProperty(“webdriver.chrome.driver”, “caminho/para/chromedriver”);
// Criar uma instância do WebDriver
WebDriver driver = new ChromeDriver();
try {
// Configurações iniciais
String url = “https://example.com/login”; // Substitua pela URL da sua página de login
String email = “usuario@example.com”; // Substitua por um email válido
String invalidPassword = “senhaErrada”; // Substitua pela senha incorreta usada no teste
int maxAttempts = 3; // Número máximo de tentativas permitidas
// Acessar a página de login
driver.get(url);
for (int i = 1; i <= maxAttempts; i++) {
System.out.println(“Tentativa de login inválida número: ” + i);
// Localizar e preencher o campo de email
WebElement emailField = driver.findElement(By.id(“email”)); // Substitua ‘email’ pelo ID correto
emailField.clear();
emailField.sendKeys(email);
// Localizar e preencher o campo de senha com uma senha inválida
WebElement passwordField = driver.findElement(By.id(“password”)); // Substitua ‘password’ pelo ID correto
passwordField.clear();
passwordField.sendKeys(invalidPassword);
// Clicar no botão de login
WebElement loginButton = driver.findElement(By.id(“loginButton”)); // Substitua ‘loginButton’ pelo ID correto
loginButton.click();
// Verificar se a mensagem de erro de login é exibida
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
WebElement errorMessage = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(“errorMessage”))); // Substitua pelo seletor correto
if (errorMessage.isDisplayed()) {
System.out.println(“Mensagem de erro exibida após tentativa ” + i + “: ” + errorMessage.getText());
}
// Após a última tentativa, verificar se a conta foi bloqueada
if (i == maxAttempts) {
WebElement lockoutMessage = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(“lockoutMessage”))); // Substitua pelo seletor correto
String expectedLockoutMessage = “Sua conta foi bloqueada devido a várias tentativas falhas.”; // Substitua pelo texto esperado
if (lockoutMessage.isDisplayed() && lockoutMessage.getText().equals(expectedLockoutMessage)) {
System.out.println(“Teste bem-sucedido: conta bloqueada após ” + maxAttempts + ” tentativas.”);
} else {
System.out.println(“Teste falhou: mensagem de bloqueio não exibida corretamente.”);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Fechar o navegador
driver.quit();
}
}
}
Explicação do Código
- Número de tentativas:
- O teste realiza várias tentativas de login (controladas pela variável
maxAttempts
).
- O teste realiza várias tentativas de login (controladas pela variável
- Mensagem de erro após cada tentativa:
- Após cada tentativa, o teste verifica se uma mensagem de erro de login é exibida (
errorMessage
).
- Após cada tentativa, o teste verifica se uma mensagem de erro de login é exibida (
- Mensagem de bloqueio:
- Após o número máximo de tentativas (definido por
maxAttempts
), o teste verifica se a mensagem de bloqueio da conta aparece (lockoutMessage
).
- Após o número máximo de tentativas (definido por
- Espera explícita:
- Usamos
WebDriverWait
para aguardar elementos como mensagens de erro ou bloqueio se tornarem visíveis na página.
- Usamos
- Mensagens no console:
- Imprime no console o status de cada tentativa e o resultado final do teste.
Aprimoramentos
- Reset de Conta:
- Após o teste, certifique-se de que a conta seja desbloqueada para testes futuros, se necessário.
- Isso pode ser feito manualmente ou via automação (chamada de API ou acesso ao painel administrativo).
- Integração com Frameworks:
- Para testes mais estruturados, utilize frameworks como JUnit ou TestNG para organização e relatórios.
- Mensagens dinâmicas:
- Se a mensagem de bloqueio ou erro variar, use
contains()
em vez deequals()
para maior flexibilidade.
- Se a mensagem de bloqueio ou erro variar, use