gpt4 book ai didi

java - 如何处理WebDriver的PageObjects模式中的继承?

转载 作者:行者123 更新时间:2023-12-01 05:44:42 24 4
gpt4 key购买 nike

有人可以建议一种处理有关页面对象模式的继承的方法吗?

例如,页面对象需要共享属性和方法。

public class LoginPage extends SuperPage
public class SuperPage extends LoadableComponent<SuperPage>

这样就可以了。但问题是你的 UnitTests 不扩展 SuperPage,它们扩展 TestCase,它保存测试的全局属性等。

我尽量避免重复,因为我需要在 TestCase 和 SuperPage 中共享相同的内容...页面和测试只能扩展其中之一。

例如,我需要在可用的页面对象和测试中使用相同的表单数据...

示例:

如果您有一个用于填写 html 表单的 PageObject,则需要表单字段的名称,但即使在其他 pageObject 中也需要它们。这样您就可以在字段名称所在的位置扩展 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();
}

最佳答案

页面对象模式的关键方面之一是测试用例和页面结构的隔离。如果您的测试是在字段中输入内容,那么您可能做错了。您的页面应该提供允许测试执行重要操作的方法,而不是让测试填充页面的变量。因此,而不是:

myPage.sigLvl = "10";
myPage.langTo = "en";
myPage.langFrom = "de";

你会:

myPage.addTranslation("en", "de", 10);

重点是,您的测试不应该关心页面的结构(字段的名称、它们在页面上的排列方式,等等),而应该关心应用程序的行为。

关于java - 如何处理WebDriver的PageObjects模式中的继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com