请原谅本文中的术语问题。这似乎是一个基本的Java问题,我只是没有在搜索中找到结果。
我想创建一个可能在Selenium pageObject框架中返回多个类型的方法。请参见下面的示例:
public class ProductPage extends BasePage {
public ProductPage(WebDriver driver) {
super(driver);
}
public ProductPage enterValue(String inputText) {
driver.findElement(By.id("someId")).sendKeys(inputText);
return this;
}
enterValue方法有时会到达与ProductPage不同的页面。如果我知道它可以导航到其他地方,则倾向于创建其他方法。但是,这使得其他人更难以理解和维护测试。
是否有办法混淆返回类型并在方法内部添加条件,以允许该方法返回其他类型?这是我的最佳尝试:
public NotSureWhatToPutHere enterValue(String inputText) {
driver.findElement(By.id("someId")).sendKeys(inputText);
if(isAlertPresent){
return new ProductAlertPage(driver);
} else if (isErrorDisplayed) {
return new ErrorPage(driver);
} else {
return this;
}
}
答案 0 :(得分:5)
您需要使用多态性或继承。
因此ProductAlertPage
和ErrorPage
都从interface
或class
继承,例如Page
。然后,您可以使用Page
的返回类型。
在您的情况下,ErrorPage
和ProductAlertPage
也应扩展BasePage
,然后您可以返回BasePage
作为返回类型。
public BasePage enterValue(String inputText) {
driver.findElement(By.id("someId")).sendKeys(inputText);
if(isAlertPresent){
return new ProductAlertPage(driver);
} else if (isErrorDisplayed) {
return new ErrorPage(driver);
} else {
return this;
}
}
答案 1 :(得分:1)
您可以尝试:
public Page enterValue(String inputText) {
}
Page
和extended
的{{1}}在ProductAlertPage
处。
ErrorPage
或者,您也可以将public ProductAlertPage extends Page {
// code for ProductAlertPage
}
public ErrorPage extends Page {
// code for ErrorPage
}
设为Page
,并让interface
和ProductAlertPage
都实现ErrorPage
,如下所示:
interface
这是一个更好的解决方案,因为它耦合性较差。