问题描述
我有以下问题:
public class HomePage extends BasePage {
public HomePage(WebDriver driver) {
super(driver);
getDriver().get("URL");
}
public class OptionsPage extends HomePage {
public OptionsPage(WebDriver driver) {
super(driver);
}
现在,问题出在测试上,我想从某个动作中获取OptionsPage(假设单击HomePage上存在的按钮)。看来,一旦我调用它,页面就会再次加载:
// Open page
HomePage home = getHomePage(); //loads URL from BasePage
// click on some option which takes me to the OptionsPage
OptionsPage options = home.clickOnRandomOption(); //this method right here loads the URL again,from there the assertion fails since the page just loads again.
Assert.assertTrue(options.isRandomOptionSelected(),"ObvIoUsly it wasn't selected.");
在主页上单击选项的方法如下:
public OptionsPage clickOnRandomOption() {
getWait().until(ExpectedConditions.elementToBeClickable(RandomOption));
RandomOption.click();
return new FlightOptionsPage(getDriver());
}
有人可以帮我吗?
解决方法
您的挑战是,当实例化optionsPage
时,您正在链上执行所有构造函数。
在您的代码结构中,您每次要创建OptionsPage
时都在运行:HomePage
-> BasePage
-> optionsPage
。这就是Gorilla-banana-jungle问题的测试POM。
我可以看到home.clickOnRandomOption()
的返回类型是OptionsPage
,所以我假设这是您实例化选项页面的地方。
两个建议-它们中的任何一个都可以解决您的问题,但是我建议您考虑同时实现这两个建议:
-
不要那样链接您的页面。保持每个单独,并且只能扩展一次,即每个页面仅从
BasePage
开始扩展。如果有一种通用的方法需要多个页面,请将其放在您的BasePage
中,而无需从其他页面扩展页面。 -
不要在构造函数中执行影响测试上下文的代码-仅将构造函数用于初始化变量。通过这种方式,我的意思是在创建
HomePage
时不要在构造函数中导航(driver.get("URL")
)。在运行测试时,这将给您将来带来麻烦。例如,如果您想从pageX
开始并通过自动重定向导航到首页,然后对首页执行更多操作怎么办? -您的POM不支持它,因为您创建homePage
时将导航到该URL。