LoginPage.js
import BasePage from "./BasePage";
export default class LoginPage extends BasePage {
constructor() {
super()
this.navBar = "//nav | //header | //*[contains(@class,'nav')] | //*[contains(@class,'menu')]"
// Selectores del formulario de login - varios alternativos para robustez
this.inputEmail = "input[type='email'], input[name='email'], input[id='email'], input[placeholder*='mail' i], input[placeholder*='Email' i]"
this.inputPassword = "input[type='password'], input[name='password'], input[id='password']"
this.submitButton = "button[type='submit'], input[type='submit']"
this.loginPageText = "//*[contains(text(),'Hi,')] | //*[contains(text(),'Dashboard')] | //*[contains(text(),'Welcome')]"
}
async visit() {
await page.goto("https://www.phptravels.net/login", {
waitUntil: "networkidle2",
timeout: 30000
})
const url = await this.getUrl()
console.log(url)
// Esperar que el formulario este listo
await page.waitForSelector("input[type='email'], input[type='text'], input[name='email']", { timeout: 15000 })
}
async login(email, password) {
// Escribir email
const emailInput = await page.$("input[type='email']") ||
await page.$("input[name='email']") ||
await page.$("input[placeholder*='mail' i]") ||
await page.$("input[type='text']")
if (!emailInput) throw new Error("No se encontro el campo de email")
await emailInput.click({ clickCount: 3 })
await emailInput.type(email)
// Escribir password
await page.waitForSelector("input[type='password']", { timeout: 10000 })
const passInput = await page.$("input[type='password']")
await passInput.click({ clickCount: 3 })
await passInput.type(password)
// Click submit
const submitBtn = await page.$("button[type='submit']") ||
await page.$("input[type='submit']")
if (!submitBtn) throw new Error("No se encontro el boton de submit")
await submitBtn.click()
// Esperar navegacion
await page.waitForNavigation({ waitUntil: "networkidle2", timeout: 20000 })
}
async ValidateLogin() {
// Verificar que cambie la URL (ya no contiene 'login')
const url = await this.getUrl()
console.log("URL despues del login:", url)
if (url.includes("login")) {
throw new Error("El login fallo - sigue en la pagina de login")
}
}
}