如果找不到元素,我不希望此方法返回 null

Posted

技术标签:

【中文标题】如果找不到元素,我不希望此方法返回 null【英文标题】:I don't want this method to return null if element is not found 【发布时间】:2017-10-06 15:23:19 【问题描述】:

我在页面工厂模型中使用以下 mwtod 创建动态元素。我将 iosClassChain 值作为字符串传递,然后将其转换为元素。当页面上存在元素时,这工作正常,但当元素不存在时返回 null。方法如下:

public MobileElement mobileElementUsingIOSClassChain(String objElement) throws IOException 

    MobileElement objMobileElement = null;

    try 
        objMobileElement = (MobileElement) ((AppiumDriver) GetDriver()).findElement(ByIosClassChain.iOSClassChain(objElement));

     catch (Exception e) 
        System.err.println("Element not found");
    
    return objMobileElement;


我为 objElement 传递的值是:

String elementStr = "**/XCUIElementTypeButton[`label=='Name'`]"

有什么建议吗?

【问题讨论】:

那么你希望它返回什么?还是应该根本不返回并抛出异常? 使用可选 选项是恕我直言,不是合理异常处理的合适替代方案...... 如果找不到该元素,那么是否可以创建一个我可以分配给“objElement”的虚拟元素,如下所示:objElement = someDummyElementCreated。如果是,那么如何创建它? 【参考方案1】:

那么它应该返回什么呢?要么在 catch 块中添加 return 语句(并删除 throws 声明),要么完全删除 try-catch-block 并将 Exception 扔给调用者。

顺便说一句,使用catch (Exception e) 被认为是不好的编码风格,改用更具体的Exception(如IOException)。

【讨论】:

即使我在 catch 块中编写 return 语句,该方法也应该有一个 return 语句作为它的最后一条语句,否则它会显示编译错误。相反,我想知道我们是否可以在这里创建一个虚拟元素,我可以将它传递给objElement,这样这个方法就永远不会返回 null。 类似这样的东西:objElement = dummyElementCreated

以上是关于如果找不到元素,我不希望此方法返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Playwright JS - 如果找不到元素/选择器,如何全局定义/更改超时?

QObject::findChild 返回 null,找不到跨 QML 对象

在缓存中找不到但不缓存结果时如何使@Cacheable返回null?

在 Angular + Spring Security 应用程序中找不到错误

找不到元素'RelativeLayout'的声明

找不到 id 并更新和增加子文档 - 返回 null Mongoose/mongoDB