gpt4 book ai didi

Java 和 Selenium : Static methods in Page Objects

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:37:21 25 4
gpt4 key购买 nike

当我尝试在页面对象中使用静态方法时遇到 NullPointerExceptions 问题。如果我用非静态方法来做,它工作正常。

非静态版本:

public class ComplaintPage {

private ExtendedWebDriver driver;

@FindBy(css = "[data-selector=date-received-complaint]")
public WebElement dateComplaintReceoved;

public ComplaintPage() {
driver = Browser.extendedDriver();
PageFactory.initElements(driver, this);
}

public void setComplaintDate() {
dateComplaintReceoved.sendKeys(LocalDate.now().toString());
}
}

Calling code:

ComplaintPage complaintPage = new ComplaintPage;
complaintPage.setComplaintDate();

这很好用。日期字段已设置。

静态版本

public class ComplaintPage {

private static ExtendedWebDriver driver;

@FindBy(css = "[data-selector=date-received-complaint]")
public static WebElement dateComplaintReceoved;

public ComplaintPage() {
driver = Browser.extendedDriver();
PageFactory.initElements(driver, this);
}

public void static setComplaintDate() {
* dateComplaintReceoved.sendKeys(LocalDate.now().toString());
}
}

Calling code:

ComplaintPage.setComplaintDate();

这不起作用,并导致在标有“*”的行(访问 WebElement 的行)上出现 java.lang.NullPointerException。

我有点喜欢在测试中使用这样的静态方法,因为我没有真正发现它有什么问题,而且它使代码更易于阅读。我以前用 C#/VS 做过,但出于某种原因,我在这里遗漏了一些重要的东西。

最佳答案

NullPointerException被抛出是因为PageFactory作品。您会看到,当您创建 ComplaintPage 的实例时类,你正在调用它的构造函数:

public ComplaintPage() {
driver = Browser.extendedDriver();
PageFactory.initElements(driver, this);
}

构造函数调用initElements PageFactory的方法|类(class)。此方法初始化所有 WebElementList<WebElement > 使用 Java 反射 API 的字段。它基本上改变了默认 null接口(interface)实现的值。它还提供了 WebElement 的惰性实例化,这意味着 - WebElement s 仅在需要时被发现(寻找?)——当您对它们调用操作时。

当您创建静态方法和静态 WebElements 时 - 您没有调用类的构造函数,这导致不调用 initElements方法。

所有用 @FindBy 注释的元素没有被初始化。这就是为什么将 PageFactory 与静态方法一起使用不是一个好主意。

除了使用 PageFactory,您还可以找到具有经典 driver.findElement 的元素在静态方法中。

    public void static setComplaintDate(WebDriver driver) {
driver.findElement(By.cssSelector("[data-selector=date-received-complaint]")).sendKeys(LocalDate.now().toString());
}

关于Java 和 Selenium : Static methods in Page Objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56042096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com