Java Selenium WebDriver—将WebElement选择器定义为常量是一个好主意吗?
我已经重构了java项目,将WebElement选择器定义为By常量。这允许我将By常量传递到findElement方法中,而不需要对方法中的By选择器类型求值。这是个好主意吗?如果我将By变量定义为公共静态最终常量,我可能会遇到什么问题 以下是一个例子: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
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。它会更快(但谁在乎呢,它已经足够快了)。