在页面 class 中定义的 Webelement 在测试 class 中不可访问

Webelement, which is defined in page class, is not accessible in Test class

我正在使用 POM 框架自动化一个网站,我有一个页面 class 和一个测试 class(在许多页面中)。

页面 class 是:FindPeople.java 我在里面写的代码如下:

public class FindPeople {

    @FindBy(id="ContentPlaceHolderDefault_Body_Body_Content_***SearchSimpleDialog_13_tbQuery")

    WebElement serachfield;

    @FindBy(xpath=".//*[@id='ContentPlaceHolderDefault_Body_Body_Content_***SearchSimpleResults_14_pnlResults']/div[1]/div/a")

    WebElement serachresult;

    public void typeInSearchField()
    {
        serachfield.sendKeys(DataProviderFactory.readHomeData().getPeopledata(2, 0));
    }
}

我有一个名为 VerifyInputField.java 的测试 class,里面的代码如下所示:

public class VerifyInputField {

    WebDriver driver;

    @Test
    public void verifyInputField() throws AWTException {

        driver= BrowserFactory.getBrowser("Chrome");

        BrowserFactory.getURL();

        FindPeople findpeople = PageFactory.initElements(driver, FindPeople.class);

        findpeople.typeInSearchField();
     }
}

问题是,我在 FindPeople.java 中识别的 Webelemnts (serachfield, serachresult);在 VerifyInputField.java 中无法访问。我的意思是,我没有使用这些元素中的任何一个来获得像 click()、gettext() 这样的常用方法。

我做错了什么吗?

属性 serachfieldserachresult 看起来像 package private,无法从包外部访问它们。您需要做的就是使用 public 访问修饰符使它们 public。

而且,谈到 POM 的最佳实践,您无论如何都不应该 public 访问这些属性。尝试在 FindPeople class 中创建方法,这将帮助您使用这些属性并使方法 public

每个没有访问修饰符声明的 属性 都是私有的,所以如果你想创建 public 属性,你必须准确地指定它。 但我同意 Saifur 关于最佳实践和创建访问属性的内部方法的观点。

这里可能有一些有用的信息:。