簡體   English   中英

@FindBy批注定義的Webelement返回空指針

[英]Webelement defined by @FindBy annotation returns null pointer

出於某種原因,當我調用方法Spage.editExButton(int ID)時,出現一條錯誤消息,指出WebElement首先為null。 為什么它為空? 我已經使用@FindBy批注定義了它。 為了能夠單擊它,我必須使用findElement(By.id(“ xxx”))明確定義該元素。 但是,為什么我不能使用@FindBy表示法來調用它?

public class SPage extends GPage<SPage> {

    public SPage() {
        super();
    }

    public SPage(String pageType) {
        super(pageType);
    }

    @FindBy(id = "xxx")
    WebElement first;

    public WebElement eButton(int ID) {
        first.click();
        String tmp = ID + "-Edit";
        WebElement edit = getDriver().findElement(By.id(tmp));
        return edit;
    }

    public EPage cEdit(int ID) {
        eButton(ID).click();
        return new EPage(getBasePageType()).openPage(EPage.class);
    }
}

我正在這樣調用方法:

static EPage epage;
static SPage spage;

@Test
public void edit_exception() {
             epage = spage.cEdit(IDbefore);
}

您需要調用此函數(最好在構造函數中):

PageFactory.initElements(getDriver(), this);

詳細信息: https : //code.google.com/p/selenium/wiki/PageFactory

正如所有其他答案提到的那樣,我們必須使用PageFactory.initElements()來初始化webElements,

有兩種方法可以完成,或者可以在兩個地方完成:

1)在類SPage中

由於SPage類中有兩個構造函數,因此我們必須添加以下代碼以使該類中聲明的所有元素完整化,因此應在兩個類中都完成此操作,因為我們不知道將使用哪個構造函數來初始化SPage

我們將驅動程序實例傳遞給SPage類構造函數,如下所示:

public SPage(WebDriver driver) {
    super();
    PageFactory.initElements(driver, this);
}

public SPage(String pageType, WebDriver driver) {
    super(pageType);
    PageFactory.initElements(driver, this);
}

2)在要使用SPage WebElement的其他類中

在上述例子中elementsCan在edit_exception()方法被寫入的類中initialzed,總之之前的任何地方,我們要使用的元件/類S頁面的動作,現在代碼將看起來像下面:

@Test
public void edit_exception() {
             spage =  PageFactory.initElements(driver, SPage.class);  //we are not passing driver instance to SPage class
             epage = spage.cEdit(IDbefore);
}

在測試類中,我添加了以下代碼行

WebMainMenu mainmenu = PageFactory.initElements(driver,WebMainMenu.class);

mainmenu.doStuff(driver,5);

等等

如上所述,我同意您需要實例化頁面對象。

WebElement first;

為null,因為在實例化頁面類時未初始化element。 因此,初始化頁面類中的所有元素

 PageFactory.initElements(driver,  this); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM