2017-06-19 85 views
0

我已經能夠成功地在PageFactory中使用@FindBy,但培訓我的人堅持我仍然可以在不使用PageFactory的情況下使用@FindBy。他向我展示了他的代碼,並且快速瀏覽一下,似乎他沒有使用PageFactory。但是,如果不使用PageFactory,我總是會得到NullPointerException。我確實讓他看看我的代碼,並且......他似乎也不知道爲什麼我的代碼無法正常工作。我希望能夠得到新鮮的雙眼來啓發我。在Selenium中使用@FindBy而沒有PageFactory

這裏是我的代碼

public class BaseClass { 

public WebDriver driver; 
private String title; 
private Wait<WebDriver> wait; 

public BaseClass(WebDriver driver, String title) { 

    this.driver = driver; 
    this.title = title; 
    wait = new FluentWait<WebDriver>(driver).withTimeout(45, TimeUnit.SECONDS).pollingEvery(2, TimeUnit.SECONDS); 
} 
} 

//

public class Test extends BaseClass { 


public Test(WebDriver driver) { 
    super(driver, "Login page"); 

} 


@FindBy(name="j_password") 
public WebElement password; 

@FindBy(name="j_username") 
public WebElement username; 

public void startest() throws Exception { 
username.clear(); 
username.sendKeys(id); 
password.clear(); 
password.sendKeys(secret); } 
} 
+0

我不認爲有沒有方法來使用@FindBy沒有pagefactory – kushal

回答

1

不,你不能用一個片段,而無需使用PageFactory。請閱讀下面的行以獲取正確的解釋:

頁面工廠將根據定義的「locators」,初始化每個WebElement變量,並引用實際網頁上的相應元素。這是通過使用@FindBy註釋完成的。

註解?

在Page Factory中,註釋用於給出WebElements的描述性名稱以提高代碼的可讀性。註釋@FindBy用於標識頁面中的Web元素。

默認情況下,PageFactory將搜索頁面上具有匹配id屬性的元素,如果失敗,則會按名稱屬性進行搜索。但是,因爲我們需要更多的控制來識別HTML頁面中的元素並將它們映射到頁面對象字段。

下面的鏈接有更多的細節: http://www.seleniumeasy.com/selenium-tutorials/page-factory-pattern-in-selenium-webdriver

0

是的,你可以不用硒的PageFactory,但它意味着你需要實現自己的它等價的。

PageFactory對創建/填充元素沒有任何神奇的作用。它的強大之處在於它如何執行一些更高級的事情,如緩存,並且只在元素被引用時填充(在C#實現中通過使用RealProxy來完成,不確定Java等價物)。

另一種選擇是存儲By屬性,並根據需要對它們進行評估。

相關問題