我目前将元素位置存储在远离其访问器方法的单独类中,我正在寻找一种更有效的存储方式。从我所读到的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;
}
我不喜欢他们认为我正在扩展元素类
答案 0 :(得分:2)
我认为在Enum中存储定位器不是一个好主意,也不会在属性文件中存储定位器。两者都有问题。相反,我建议您使用支持PageFactory的PageObjects。
PageFactory
中,元素将使用@FindBy
注释进行注释,它们就在Page Object中,以便您可以轻松使用它们PageFactory
会为您找到元素,从而避免了driver.findElement或driver.findElements样板代码的开销PageFactory
找不到元素时,它会抛出一个异常,确切地指出它失败的地方。 PageFactory
浏览器自动化是一个难以解决的问题,更不用说正在测试的不断发展的应用程序,需要支持不同的浏览器/平台。因此,我们应该避免添加更多层,这会增加复杂性,而是尽可能地利用开源团队提供的解决方案。