Java Selenium WebDriver—将WebElement选择器定义为常量是一个好主意吗?

Java Selenium WebDriver—将WebElement选择器定义为常量是一个好主意吗?,java,selenium-webdriver,Java,Selenium Webdriver,我已经重构了java项目,将WebElement选择器定义为By常量。这允许我将By常量传递到findElement方法中,而不需要对方法中的By选择器类型求值。这是个好主意吗?如果我将By变量定义为公共静态最终常量,我可能会遇到什么问题 以下是一个例子: public static final By LOGIN_BUTTON_SELECTOR = By .cssSelector("input[name='logIn']"); /** * click the Login bu

我已经重构了java项目,将WebElement选择器定义为By常量。这允许我将By常量传递到findElement方法中,而不需要对方法中的By选择器类型求值。这是个好主意吗?如果我将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;
}
这是一个很好的做法

您可以将其与PageObject一起使用,请参见示例:


谢谢您的回复,我主要关心的是,将By变量定义为静态最终常数是否有问题。这是一个好做法的原因是:1。它可以防止在测试中更改元件,从而导致可能出现的不良测试,2。它在测试顶部为您提供一个中心位置,以便在元素发生更改时更改元素的选择器语句,以及3。它会更快(但谁在乎呢,它已经足够快了)。