【发布时间】:2016-12-13 23:31:22
【问题描述】:
目前,我正在开发一个“Selenium Wrapper Library”,其中创建了一组方法,以便在特定的 Web Portal 上执行自动化。这些方法包括调试日志和其他逻辑,并在测试类中调用。
我刚刚创建了一个新方法来检查表格单元格(标记名称'td')是否存在于表格行中(标记名称'tr')。下面是创建的方法:
public void checkEntryIsNotInTable(String elementTableName, By byElementTable, String checkVisibleText1) {
// Get All Rows from table, using tagname <tr>
List<WebElement> tableRows = getElements(elementTableName, byElementTable);
Debug.log.info("\tTotal of [" + tableRows.size() + "] Rows found in table [" + elementTableName + "]" );
int rowCount = 0;
boolean isNotFound = false;
FINDCELL:
for(WebElement row : tableRows) {
// Get All Cells from table, using tagname <td>
List<WebElement> rowCells = row.findElements(By.tagName("td"));
if(rowCells == null) {
Debug.log.error("\tNo Elements found with TagName [td] in Element [" + byElementTable + "]");
} else {
Debug.log.info("\tRow [" + rowCount++ + "] contains [" + rowCells.size() + "] Cells");
}
// Check Visible Text in Cell, and if found, break from for loop.
for(WebElement cell : rowCells) {
waitFor(2.0);
if(!cell.getText().contains(checkVisibleText1)){
Debug.log.info("\t[" + checkVisibleText1 + "] not found in any Cell.");
isNotFound = true;
break FINDCELL;
}
}
}
// What kind of exception should I throw here!!
if(isNotFound) {
Debug.log.error("\t[" + checkVisibleText1 + "] found in one Cell.");
throw new NoSuchElementException(checkVisibleText1);
}
}
在这个阶段,当找到'checkVisibleText1'时,我需要抛出一个新的异常。但是,对于此方法,异常“NoSuchElementException”不反映正确的异常,因为找到了元素 - 并且不应该找到它。
您认为哪种异常适合反映异常与方法的功能?
非常感谢。
PS。也随意建议代码改进:)
【问题讨论】:
-
你的需求状态应该抛出的类型
-
@Stultuske:我没有得到你的答案。
-
如果设计您的结构的建筑师决定您必须抛出 BoogaBoogaBoogaException,那么就是这样。没有固定的“这是你需要的,没有别的”标准。
-
@Stultuske。是我写了这篇文章,我已经在这里发布了一个更好的解决方案,如果有的话。如果这是由建筑师编写的,我仍然会在这里寻找更好的方法。
-
谁设计谁写,不一定是一样的。无论如何,如果您进行了分析,并且您的公司对结构没有要求,则可以决定。一种已知的方法是将内部异常类型分为业务异常和技术异常,这些异常具有错误代码,有助于准确判断发生了什么
标签: java selenium dom automation qa