在过去的一年里,我为我的团队构建了一个非常好的 WebDriver 框架。相当标准的票价:页面类通常在我们的平台上封装页面的全部功能(控件作为对象,根据需要的方法)并使用一些全局方法扩展基类,在 JUnit 测试类中调用多个页面,典型的断言方法,亚达亚达。书本上没有什么奢侈的东西,但非常实用和灵活。
然而,最近,我被要求使用该框架来自动化大量页面,这些页面的表单可以容纳 100 个甚至更多的输入、选择、选项等。这让我感到非常震惊。此外,许多自定义表单控件的 id 会随着环境的变化而变化(幸运的是,在初始推送后它们在每个环境中保持静态)。反正...
让我们看一下我每天使用的典型 PageObject 结构:
/** Constructor*/
public someConstructor(WebDriver driver){
super(driver, pageTitle);
}
/**Locators*/
By searchBoxLocator = By.id("phSearchInput");
By searchBoxClearLocator = By.id("phSearchClearButton");
By searchButtonLocator = By.cssSelector("input[value='Search']");
/**Some Methods*/
public void selectFromTabBar(String tabName){
driver.findElement(By.linkText(tabName)).click();
}
public static void enterInputValue(WebDriver driver, By by, String val){
List<WebElement> elements = null;
elements = driver.findElements(by);
if(!elements.isEmpty()){
driver.findElement(by)).sendKeys(val);
}else{
throw new NoSuchElementException("Message");
}
}
就像我提到的,这里没有什么异国情调,但现在我要向大家提问。假设我没有传统的 5-15 By's per PageObject,但可能需要超过 100 个页面来处理 10 个页面。更复杂的是,它们在每个环境中也将具有独特的价值,这完全不在每个人的控制范围内,无法调和。那么这里的适当方法是什么......我是否咬紧牙关并硬编码每页 100 英寸作者,我是否将所有作者外部化为,比如说,一个 Excel 文档并通过我不知道,JXL 或其他方式拉入所有内容,或者我是否对我知道将是静态的 By 进行硬编码并将所有内容都放入外部文件中?
归根结底,我知道没有正确的答案,但我只是好奇其他人对此的态度。现在,我已经为具有如此多表单元素的页面外部化了 By,并定义了不会在 PageObject 中更改的控件,但感觉很笨重。也许我追求的优雅太多了,但任何想法都会非常棒。