【问题标题】:Page Object Model Returning Action Instead of Object?页面对象模型返回操作而不是对象?
【发布时间】:2015-01-22 20:44:47
【问题描述】:

拿起一个 Java-Selenium 框架,注意到以前的所有者有很多定义为 java 类的页面对象模型,但是他们没有返回 driver.findElement(),而是返回了 driver.findElement().click();

编辑:你们是对的,它不会按说返回

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

我以前从未见过这种情况,但这是否有效/符合页面对象模型的理想?

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

【问题讨论】:

  • 您能否发布一个完整的方法来显示/解释您的意思?
  • 我怀疑他们正在“返回”它,因为它是 void 方法,Java 会抱怨说你不能返回 void 方法......所以我假设你只是误解了代码。例如,如果它是方法中的最后一行,则它不是“返回”。
  • 我们以前也从未见过这种情况(返回 void)。你能用代码更新问题吗?

标签: java selenium selenium-webdriver pageobjects


【解决方案1】:

就页面对象而言,如果您所指的“动作”是对下一页的动作,那么通常的做法是拥有一个带有普通构造函数的 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();
    }
}

【讨论】:

  • 我同意您对此的回答。如果定义了动作,那么我们应该能够在页面对象中包含动作。但是,如果定义了一个元素,那么我们应该返回该元素。需要清楚地区分这两者,我认为这就是我在这里变得奇怪的地方。
【解决方案2】:

这没有意义,因为根据source codeclick() 上的WebElement 只是执行远程驱动程序命令并且什么都不返回:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2022-01-11
    • 2017-10-06
    • 2016-02-20
    相关资源
    最近更新 更多