// Path: src/main/java/com/frameworkium/core/ui/pages/PageFactory.java
// public class PageFactory {
// 
//   private static final Logger logger = LogManager.getLogger();
// 
//   protected PageFactory() {
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(Class<T> clazz) {
//     return instantiatePageObject(clazz).get();
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(
//       Class<T> clazz, Duration timeout) {
//     return instantiatePageObject(clazz).get(timeout);
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(
//       Class<T> clazz, String url) {
//     return instantiatePageObject(clazz).get(url);
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(
//       Class<T> clazz, String url, Duration timeout) {
//     return instantiatePageObject(clazz).get(url, timeout);
//   }
// 
//   private static <T extends BasePage<T>> T instantiatePageObject(Class<T> clazz) {
//     try {
//       return clazz.getDeclaredConstructor().newInstance();
//     } catch (InstantiationException | IllegalAccessException
//         | NoSuchMethodException | InvocationTargetException e) {
//       logger.fatal("Unable to instantiate PageObject", e);
//       throw new IllegalStateException("Unable to instantiate PageObject", e);
//     }
//   }
// }


import com.frameworkium.core.htmlelements.element.Link;
import com.frameworkium.core.ui.annotations.ForceVisible;
import com.frameworkium.core.ui.annotations.Visible;
import com.frameworkium.core.ui.pages.BasePage;
import com.frameworkium.core.ui.pages.PageFactory;
import io.qameta.allure.Step;
import org.openqa.selenium.support.FindBy;
import java.time.Duration;
import static java.time.temporal.ChronoUnit.SECONDS;
package com.frameworkium.integration.theinternet.pages;




public class WelcomePage extends BasePage<WelcomePage> {

    @Visible
    @FindBy(linkText = "Checkboxes")
    private Link checkboxesLink;

    // ForceVisible not strictly required, just testing it doesn't error
    @ForceVisible
    @FindBy(linkText = "Drag and Drop")
    private Link dragAndDropLink;

    @FindBy(linkText = "Dynamic Loading")
    private Link dynamicLoadingLink;

    @FindBy(linkText = "Hovers")
    private Link hoversLink;

    @FindBy(linkText = "JavaScript Alerts")
    private Link javascriptAlertsLink;

    @FindBy(linkText = "Key Presses")
    private Link keyPressesLink;

    @Step("Navigate to https://the-internet.herokuapp.com")
    public static WelcomePage open() {
// Path: src/main/java/com/frameworkium/core/ui/pages/PageFactory.java
// public class PageFactory {
// 
//   private static final Logger logger = LogManager.getLogger();
// 
//   protected PageFactory() {
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(Class<T> clazz) {
//     return instantiatePageObject(clazz).get();
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(
//       Class<T> clazz, Duration timeout) {
//     return instantiatePageObject(clazz).get(timeout);
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(
//       Class<T> clazz, String url) {
//     return instantiatePageObject(clazz).get(url);
//   }
// 
//   public static <T extends BasePage<T>> T newInstance(
//       Class<T> clazz, String url, Duration timeout) {
//     return instantiatePageObject(clazz).get(url, timeout);
//   }
// 
//   private static <T extends BasePage<T>> T instantiatePageObject(Class<T> clazz) {
//     try {
//       return clazz.getDeclaredConstructor().newInstance();
//     } catch (InstantiationException | IllegalAccessException
//         | NoSuchMethodException | InvocationTargetException e) {
//       logger.fatal("Unable to instantiate PageObject", e);
//       throw new IllegalStateException("Unable to instantiate PageObject", e);
//     }
//   }
// }


// Path: src/test/java/com/frameworkium/integration/theinternet/pages/WelcomePage.java
import com.frameworkium.core.htmlelements.element.Link;
import com.frameworkium.core.ui.annotations.ForceVisible;
import com.frameworkium.core.ui.annotations.Visible;
import com.frameworkium.core.ui.pages.BasePage;
import com.frameworkium.core.ui.pages.PageFactory;
import io.qameta.allure.Step;
import org.openqa.selenium.support.FindBy;
import java.time.Duration;
import static java.time.temporal.ChronoUnit.SECONDS;

package com.frameworkium.integration.theinternet.pages;




public class WelcomePage extends BasePage<WelcomePage> {

    @Visible
    @FindBy(linkText = "Checkboxes")
    private Link checkboxesLink;

    // ForceVisible not strictly required, just testing it doesn't error
    @ForceVisible
    @FindBy(linkText = "Drag and Drop")
    private Link dragAndDropLink;

    @FindBy(linkText = "Dynamic Loading")
    private Link dynamicLoadingLink;

    @FindBy(linkText = "Hovers")
    private Link hoversLink;

    @FindBy(linkText = "JavaScript Alerts")
    private Link javascriptAlertsLink;

    @FindBy(linkText = "Key Presses")
    private Link keyPressesLink;

    @Step("Navigate to https://the-internet.herokuapp.com")
    public static WelcomePage open() {
        return PageFactory.newInstance(