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 如何在没有'的情况下初始化对象;新';PageObject方法中的关键字_Java_Selenium_Object_Inheritance_Pageobjects - Fatal编程技术网

Java 如何在没有'的情况下初始化对象;新';PageObject方法中的关键字

Java 如何在没有'的情况下初始化对象;新';PageObject方法中的关键字,java,selenium,object,inheritance,pageobjects,Java,Selenium,Object,Inheritance,Pageobjects,有人能描述一下为什么我可以在没有“new”关键字的Steps类中创建Page的新对象吗?我不清楚它到底是如何工作的。我试图从PageObject类中删除继承,但它不起作用并抛出NPE。 以下是我的Page类的一部分: public class PrototypePage extends PageObject { private String userName = "//*[@id='x-auto-1-input']"; private String password = "//*[@id='x-

有人能描述一下为什么我可以在没有“new”关键字的Steps类中创建Page的新对象吗?我不清楚它到底是如何工作的。我试图从PageObject类中删除继承,但它不起作用并抛出NPE。 以下是我的Page类的一部分:

public class PrototypePage extends PageObject {
private String userName = "//*[@id='x-auto-1-input']";
private String password = "//*[@id='x-auto-2-input']";
private String loginButton = "//*[@id='login_btn']";
private String usersDropDown = "//*[@id='x-auto-3-input']";
private String pid = "//*[@id='x-auto-4-input']";
private String pmid = "//*[@id='x-auto-5-input']";
private String fName = "//*[@id='x-auto-6-input']";
private String lName = "//*[@id='x-auto-7-input']";
private String address = "//*[@id='x-auto-8-input']";
private String city = "//*[@id='x-auto-10-input']";
private String state = "//*[@id='x-auto-11-input']";
private String zip = "//*[@id='x-auto-12-input']";
private String email = "//*[@id='x-auto-13-input']";
private String birthday = "//*[@id='x-auto-14-input']";
private String ssn = "//*[@id='x-auto-15-input']";
private String ssoServer = "//*[@id='x-auto-20-input']";
private String ssoRelayState = "//*[@id='x-auto-21-input']";
private String useIframe = "//label[contains(text(), 'Use iFrame:')]/following-sibling::div/div/div/div/div/label[contains(text(), '%s')]";
private String buttonSubmit = "//*[@id='submit_saml_btn']";

public WebElement findElementByXpath(String xpath) {
    return getDriver().findElement(By.xpath(xpath));
}

public String getPmid()
{
    waitFor(ExpectedConditions.presenceOfElementLocated(By.xpath(pmid)));
    return findElementByXpath(pmid).getAttribute("value");
}
这是我的Steps课程:

public class PrototypePageSteps {

PrototypePage prototypePage;

@Step
public void openPrototypePage() {
    prototypePage.getDriver().get("https://url.com/");
    prototypePage.getDriver().manage().window().maximize();
}

@Step
public void login(String uname, String pass) {
    prototypePage.login(uname, pass);
}

@Step
public void selectUserFromDropDown(String user) {
    prototypePage.selectUserFromDropDown(user);
}

@Step
public String getPmid() {
    return prototypePage.getPmid();
}

实际上,我想知道为什么
PrototypePage PrototypePage对象初始化工作,没有失败。提前感谢。

原型页面原型页面不是对象初始化(只是声明)。推测,该包中有设置字段的代码。这就是该字段具有包私有级别访问权限的原因。另请参阅。可能您正在使用依赖项注入框架。你是在用弹簧吗?@GregBurghardt,不,我不用弹簧。这只是一个简单的AT框架。@ElliottFrisch,现在我知道这只是一个声明,但仍然不明白它是如何工作的。您指的是该包中设置字段的哪个代码?如果有一个对象是在您没有显式创建的情况下创建的,那么您就有一个依赖项注入框架。唯一的问题是“在哪里配置?”