【问题标题】:How can I initElements on multiple classes?如何在多个类上初始化元素?
【发布时间】:2019-09-30 12:01:39
【问题描述】:

我有一节课:

public class PageFactoryInitialization {
    public MainPageObjectAction mainPageObjectAction = 
        PageFactory.initElements(
            Driver.webDriver, 
            MainPageObjectAction.class
        );
}

我在MainPageObjectAction 中拥有所有@FindBy 元素,并且我拥有扩展PageFactoryInitialization 的这个类。

@RequiredArgsConstructor
public class MainPageObjectStep extends PageFactoryInitialization {

    @Step("Enter page")
    public void doAction() {
        Driver.webDriver.get("https://staging1.ogrcrew.com");
        Driver.webDriver.manage().window().fullscreen();
        Driver.webDriver.manage().timeouts().implicitlyWait(
            10, 
            TimeUnit.SECONDS
        );
        mainPageObjectAction.menuMainNavigation.click();
        mainPageObjectAction.acceptCookies.click();
        mainPageObjectAction.menuMainNavigation.click();
    }
...

如何避免

public MainPageObjectAction mainPageObjectAction = 
    PageFactory.initElements(Driver.webDriver, MainPageObjectAction.class)

对于页面对象建模的每个类。

我尝试了各种方法,但遇到 NullPointerException 错误。

【问题讨论】:

  • 你尝试过构造方法吗?您可以在创建新页面对象时初始化父类( PageFactoryInitialization )。
  • 因为这些方法在@Step + void 方法中不知何故这是行不通的;在不扩展课程的情况下,我没有发现任何可能性

标签: java selenium webdriver automated-tests


【解决方案1】:
public MainPageObjectAction mainPageObjectAction1;

public PageFactoryInitialization(MainPageObjectAction mainPageObjectAction) {

    mainPageObjectAction = PageFactory.initElements(Driver.webDriver, MainPageObjectAction.class);

}

@Before
public void beforeTest() {
    login = PageFactory.initElements(driver, LoginPage.class );
}

public void initElements() { MainPageObjectAction mainPageObjectAction = PageFactory.initElements(Driver.webDriver, MainPageObjectAction.class); }

   List<Class> init = new ArrayList<>();
   init.add(MainPageObjectAction.class);

   PageFactory.initElements(Driver.webDriver, init);



@Override
public <T> MainPageObjectAction getPage(Class<T> page) {
    return PageFactory.initElements(Driver.webDriver, MainPageObjectAction.class);
}

public static <T> T getPage1(Class<T> page) {
    return PageFactory.initElements(Driver.webDriver, page);
}

这是我迄今为止尝试过的;没有任何工作 NullPointerException ,只有扩展类才有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多