2013-06-05 34 views
7

我重構了我的java項目來定義WebElement選擇器作爲常量。這允許我將By常量傳遞給findElement方法,而不需要評估方法中的By選擇器類型。這是一個好主意嗎?如果將By變量定義爲公共靜態最終常量,我可能會遇到什麼問題?Selenium WebDriver - 將WebElement選擇器定義爲By常量是一個好主意?

下面是一個例子:

public static final By LOGIN_BUTTON_SELECTOR = By 
     .cssSelector("input[name='logIn']"); 

/** 
* click the Login button 
*/ 
public void clickLoginButton() throws TimeoutException, 
     StaleElementReferenceException { 
    // click the Login button 
    clickElement(LoginPage.LOGIN_BUTTON_SELECTOR); 
} 

/** 
* 
* find an element 
* 
* click the element 
* 
*/ 
public void clickElement(By elementSelector) throws TimeoutException, 
     StaleElementReferenceException { 

    WebElement webElement = null; 

    // find the element by By selector type 
    webElement = getElement(elementSelector); 

    // click the element 
    webElement.click(); 

} 

/** 
* 
* generic method to get a WebElement using a By selector 
* 
*/ 
public WebElement getElement(By elementSelector) throws TimeoutException { 

    WebElement webElement = null; 

    // find an element using a By selector 
    getDriverWait().until(
    ExpectedConditions.presenceOfElementLocated(elementSelector)); 
    webElement = getDriver().findElement(elementSelector); 

    return webElement; 
} 

回答

4

這是一個很好的做法。

你可以用PageObject使用它,見例如:

https://code.google.com/p/selenium/wiki/PageObjects

+0

謝謝您的回覆,我最關心的是,如果沒有定義可變爲靜態常量最後一個問題。 –

+0

這是一個良好實踐的原因是:1.它可以防止元素在測試中被更改,從而導致不良測試的可能性; 2.它使您在測試頂部的中心位置將選擇器語句更改爲你的元素,如果他們改變,和3.它會更快(但誰真的在乎,它是足夠快)。 – CorayThan

相關問題