【问题标题】:What Exception to throw when a web element is found in Selenium Automation在 Selenium 自动化中找到 Web 元素时抛出什么异常
【发布时间】: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


【解决方案1】:

您应该检查可用的异常并:

如果您有与您的错误匹配的适当异常,则使用它,否则创建/使用自定义异常或创建/使用带有自定义消息的一般异常,具体取决于方法。

始终尝试输出异常并带有对您有帮助的消息。

在这种情况下,假设 checkVisibleText1 是您要查找的文本,使用 NoSuchElementException 并将该文本作为参数是不行的。

您应该有一个像 ElementDoesNotContainsTextException 这样的异常,并显示一条消息“\t Element [” + elementTableName+ "] 不包含文本 [" + checkVisibleText1 + "]。"

尽可能使用适当的异常,或使用带有适当消息的一般异常。

我的观点是,这种方法的噪音/日志太多,日志太多,而且对于它所具有的功能来说太复杂了。 这些方法应该有它们的例外,你不应该需要这么多日志。

一些解决方案: 1.从表格中获取文本并检查文本是否存在 2. 使用 xpath 基于该文本创建一个选择器并检查该选择器 3.检查特定选择器中的文本

创建可重用的方法,例如:theElementContainsText、theElementDoesNotContainsText

尽可能重用,例如对于上述方法,您可以使用其他方法:查找元素,从文本中获取元素

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2021-01-08
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多