我创建了一个结合了所有WebDriver接口的接口:
public interface Element extends WebElement, WrapsElement, Locatable {}它只是包装了WebElement在包装元素时可以做的所有事情。
然后是一个实现:
public class ElementImpl implements Element { private final WebElement element; public ElementImpl(final WebElement element) { this.element = element; } @Override public void click() { element.click(); } @Override public void sendKeys(CharSequence... keysToSend) { element.sendKeys(keysToSend); } // And so on, delegates all the way down...}然后,例如,一个复选框:
public class CheckBox extends ElementImpl { public CheckBox(WebElement element) { super(element); } public void toggle() { getWrappedElement().click(); } public void check() { if (!isChecked()) { toggle(); } } public void uncheck() { if (isChecked()) { toggle(); } } public boolean isChecked() { return getWrappedElement().isSelected(); }}在脚本中使用它时:
CheckBox cb = new CheckBox(element);cb.uncheck();
我还想出了一种包装
Element类的方法。您必须创建一些工厂来替换内置的
PageFactory,但这是可行的,并且具有很大的灵活性。
我已经在我的网站上记录了此过程:
- 包装WebElement:第1部分
- 包装WebElement:第2部分
我还有一个名为selophane的项目,该项目受到以下问题的启发:selophane



