请任何人提出一种处理有关页面对象模式的继承的方法吗?
例如,页面对象需要共享属性和方法。
public class LoginPage extends SuperPage
public class SuperPage extends LoadableComponent<SuperPage>
这会好的。但问题是您的 UnitTests 不扩展 SuperPage,它们扩展了 TestCase,它包含用于测试的全局属性等。
我尽量避免重复,因为我需要在 TestCase 和 SuperPage 中共享相同的东西......页面和测试只能扩展其中之一。
例如,我需要在可用的 PageObjects 和测试中使用相同的表单数据......
例子:
如果您有用于填写 html 表单的 PageObject,则需要表单字段的名称,但即使在其他 pageObjects 中也需要它们。这样您就可以扩展 SuperPage 字段名称所在的位置。它们不能从 UnitTests 提供,例如:
@CacheLookup
@FindBy(how = How.ID, using = namespace + signifLvl)
private WebElement sigLvl;
@CacheLookup
@FindBy(how = How.ID, using = namespace + languageTo)
private WebElement langTo;
@CacheLookup
@FindBy(how = How.ID, using = namespace + languageFrom)
private WebElement langFrom;
@CacheLookup
@FindBy(how = How.ID, using = namespace + description)
private WebElement desc;
但另一方面,您需要在 UnitTest 方法中使用它们,因为您将它们中的不同值提供给 PageObjects。
否则,它总是会像这样使用来自 TestCase 的变量预填充 PageObjects :
@Test
public void doStuff() throws IOException {
driver.navigate().refresh();
FillOutFormPage fofp = new FillOutFormPage(driver);
fofp.fill(some values from TestCase);
fofp.get();
}