Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 页面对象模型返回操作而不是对象?_Java_Selenium_Selenium Webdriver_Pageobjects - Fatal编程技术网

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

Java 页面对象模型返回操作而不是对象?,java,selenium,selenium-webdriver,pageobjects,Java,Selenium,Selenium Webdriver,Pageobjects,拿起一个Java Selenium框架,注意到以前的所有者有很多定义为Java类的页面对象模型,但是他们没有返回driver.findElement(),而是返回driver.findElement().click() 编辑:你们是对的,它不是按说返回的 public void leftnav_home_link(){driver.findElement().click();} 我以前从未见过这种情况,但这是否有效/符合页面对象模型的理想 这会导致什么样的潜在问题?这没有意义,因为根据WebEl

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

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

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

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


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

这没有意义,因为根据
WebElement
上的,
单击()

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

就页面对象而言,如果您引用的“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();
    }
}

你能发布一个完整的方法来显示/解释你的意思吗?我怀疑他们是在“返回”它,因为这是一个
void
方法,Java会抱怨说你不能返回
void
方法……所以我想你只是误解了代码。例如,如果它是方法中的最后一行,那么它就不是“return”。我们以前也从未见过这种情况(returningvoid)。你能用代码更新问题吗?我同意你的回答。如果定义了动作,那么我们应该能够在页面对象中包含动作。但是,如果定义了一个元素,那么我们应该返回该元素。要清楚地区分这两者,我想这就是我现在感到奇怪的地方。