0

我目前将我的元素位置存储在一个单独的类中,远离它们的访问器方法,并且我正在寻找一种更有效的存储它们的方法。从我读到的枚举中,如果要走的路。我的问题是我的假设是否正确?以及如何实施?以下是它现在如何工作的一个小例子:

元素类:

public class GeneralJobElements {
    protected By ProcurementWorkFlow = By.name("procurementWorkflow");
    protected By JobOwner = By.name("jobOwner");
    protected By JobTitle = By.name("i18n_jobTitle_minimized");

}

访问器类:

public class CreateJobGeneralTabActions extends GeneralJobElements {
    public CreateJobGeneralTabActions selectJobOwner(int index) {

    logMessage(JobOwner, "Job Owner");
    Select sele = new Select(getWebElement(JobOwner));
    sele.selectByIndex(index);

    return this;
}

公共 CreateJobGeneralTabActions fillJobTitle() {

    logMessage(JobTitle, "Job Title");
    getWebElement(JobTitle).sendKeys(JOB_TITLE);
    logger.info("The job title is:  " + JOB_TITLE);

    return this;
}

public CreateJobGeneralTabActions selectJobApprovalWF(int index) {

    logMessage(ProcurementWorkFlow, "Procurement Workflow");
    Select sele = new Select(getWebElement(ProcurementWorkFlow));
    sele.selectByIndex(index);

    return this;
}

我不喜欢他们认为我正在扩展元素类

4

1 回答 1

2

我不认为将定位器存储在 Enum 中是一个好主意,将定位器存储在属性文件中也不是一个好主意。两者都有问题。相反,我建议您使用支持PageObjects的PageFactory

  1. 对于调试、更新、添加元素,您需要跳转到外部属性文件或枚举。在PageFactory中,元素将使用注释进行@FindBy注释,并且它们就在页面对象中,以便您可以轻松地使用它们
  2. PageFactory会为您找到元素,从而避免 driver.findElement 或 driver.findElements 样板代码的开销
  3. PageFactory找不到元素时,它会抛出一个异常,指出它失败的确切位置。
  4. PageFactory 可以支持元素加载、缓存等。您无需编码
  5. 维护属性文件很痛苦,它们增长很快,您可能会添加重复的键等。还有解析和读取键的开销。如果你使用这一切都可以避免PageFactory

浏览器自动化是一个很难解决的问题,更不用说不断发展的被测应用程序需要支持不同的浏览器/平台。因此,我们应该避免添加更多的增加复杂性的层,而是尽可能地使用开源团队提供的解决方案。

于 2013-08-11T14:56:17.757 回答