如果找不到元素,我不希望此方法返回 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 = 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?