在枚举中存储常量webdriver元素

时间:2013-08-10 16:16:45

标签: java selenium enums webdriver

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

元素类:

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;
}

public 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;
}

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

1 个答案:

答案 0 :(得分:2)

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

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

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