页面对象模型返回操作而不是对象?

时间:2015-01-21 20:03:01

标签: java selenium selenium-webdriver pageobjects

挑选一个Java-Selenium框架,并注意到前一个所有者有很多被定义为java类的页面对象模型,但它们返回driver.findElement()而不是返回driver.findElement().click();。 }

编辑:你们是对的,并没有按照说法回复

public void leftnav_home_link() { driver.findElement().click(); }

我之前从未见过这个,但这是否有效/遵循页面对象模型的理想?

这会导致什么样的潜在问题?

2 个答案:

答案 0 :(得分:1)

没有意义,因为根据source codeclick()上的WebElement只执行远程驱动程序命令并且不返回任何内容:

public void click() {
    execute(DriverCommand.CLICK_ELEMENT, ImmutableMap.of("id", id));
}

答案 1 :(得分:1)

就页面对象而言,如果' action'你引用的是对下一页的动作,通常的做法是让一个带有普通构造函数的PageObjectX类和一个返回下一页对象的click方法。 click方法可能会像这样实现,这并不罕见:

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();
    }
}