页面对象模型返回操作而不是对象?
Page Object Model Returning Action Instead of Object?
拿起一个Java-Selenium框架,注意到前任拥有者有很多页面对象模型定义为java 类,但是没有返回一个driver.findElement()
,他们返回 driver.findElement().click();
编辑:你们是对的,它没有返回
public void leftnav_home_link() { driver.findElement().click(); }
我以前从未见过这个,但这 valid/follows 页面对象模型的理想吗?
这会导致什么样的潜在问题?
没有意义,因为根据 source code,click()
在 WebElement
上只执行远程驱动程序命令而 returns 什么也没有:
public void click() {
execute(DriverCommand.CLICK_ELEMENT, ImmutableMap.of("id", id));
}
就页面对象而言,如果您所指的 'action' 是对下一页的操作,则正常情况下会有一个带有普通构造函数和点击的 PageObjectX class方法返回下一页对象。点击方法可能是这样实现的,这并不罕见:
public class PageObjectX extends LoadableComponent {
private final WebDriver driver;
@FindBy(id = "go") private WebElement goB;
PageObjectX {
PageFactory.initElements(driver, this);
}
@Override
protected void load() {
driver.get("http://code.google.com/p/selenium/issues/entry");
}
@Override
protected void isLoaded() throws Error {
String url = driver.getCurrentUrl();
assertTrue("Not on the issue entry page: " + url, url.endsWith("/entry"));
}
public PageObjectY clickGoToY() {
driver.findElement( goB );
return new PageObjectY();
}
}
拿起一个Java-Selenium框架,注意到前任拥有者有很多页面对象模型定义为java 类,但是没有返回一个driver.findElement()
,他们返回 driver.findElement().click();
编辑:你们是对的,它没有返回
public void leftnav_home_link() { driver.findElement().click(); }
我以前从未见过这个,但这 valid/follows 页面对象模型的理想吗?
这会导致什么样的潜在问题?
没有意义,因为根据 source code,click()
在 WebElement
上只执行远程驱动程序命令而 returns 什么也没有:
public void click() {
execute(DriverCommand.CLICK_ELEMENT, ImmutableMap.of("id", id));
}
就页面对象而言,如果您所指的 'action' 是对下一页的操作,则正常情况下会有一个带有普通构造函数和点击的 PageObjectX class方法返回下一页对象。点击方法可能是这样实现的,这并不罕见:
public class PageObjectX extends LoadableComponent {
private final WebDriver driver;
@FindBy(id = "go") private WebElement goB;
PageObjectX {
PageFactory.initElements(driver, this);
}
@Override
protected void load() {
driver.get("http://code.google.com/p/selenium/issues/entry");
}
@Override
protected void isLoaded() throws Error {
String url = driver.getCurrentUrl();
assertTrue("Not on the issue entry page: " + url, url.endsWith("/entry"));
}
public PageObjectY clickGoToY() {
driver.findElement( goB );
return new PageObjectY();
}
}