找回密码
 立即注册
查看: 246|回复: 0

11.2 UiPath之必杀技Try Catch

[复制链接]
发表于 2022-6-16 15:59 | 显示全部楼层 |阅读模式
UiPath之必杀技Try Catch



        一 1用法(下面有截图)
          ?将开发好的流程放入Try Catch的Try中;?在Try Catch范围内,定义一个名为ProcessError的变量,类型是System.Exception;?然后,在Catches中定义一个名为exception异常变量(用于在出现异常时,获取异常信息),并通过Assign,将exception赋值给ProcessError;?最后,在Finally中放个if Activity,if Activity的Condition设置为:ProcessErroris nothing,then中放流程执行成功的操作,else中放执行失败时要做的操作。
        二 1总结
          ?程序中不需要太多的Try Catch,一般一个足够,除非特殊用途;?使用Try Catch,需要对它完全理解后使用,否则,若只把它当成一个隐藏错误的方法,那可是对Try Catch的最大误解。

      `你误解Try Catch了吗?`
        由三部分组成:
          1.Try - 放编写的流程(该流程有可能发生你未写入流程逻辑的错误)。2.Catches - 发生错误时要执行的Activity或Activity集。异常 - 要查找的异常类型。请注意,您可以添加多个类型的异常。3.Finally- Try Catch块之后要执行的Activity或Activity集。只有在没有抛出异常或发生错误并且在Catch部分中捕获时,才会执行此部分。
        属性
          ?如果Internet Explorer已关闭 - 将通知用户Internet Explorer即将打开,以便工作流程可以继续。浏览器打开,所有预期的数据都被收集并写入Excel文件。?如果Internet Explorer已打开 - 工作流程按预期执行。





)
一 1用法(下面有截图)

?将开发好的流程放入Try Catch的Try中;

?在Try Catch范围内,定义一个名为ProcessError的变量,类型是System.Exception;

?然后,在Catches中定义一个名为exception异常变量(用于在出现异常时,获取异常信息),并通过Assign,将exception赋值给ProcessError;

?最后,在Finally中放个if Activity,if Activity的Condition设置为:ProcessErroris nothing,then中放流程执行成功的操作,else中放执行失败时要做的操作。

下图是上面用法的Demo截图,图中用红色箭头标明了流程发生异常时,传递异常的路线:



二 1总结

?程序中不需要太多的Try Catch,一般一个足够,除非特殊用途;

?使用Try Catch,需要对它完全理解后使用,否则,若只把它当成一个隐藏错误的方法,那可是对Try Catch的最大误解。

你误解Try Catch了吗?

如果需要详细学习Try
Catch,可看下面的中文翻译(部分内容根据自己理解做了适当修改),并可到其英文网址(https://activities.uipath.com/docs/try-catch)下载写好的例程。
三 1附:UiPath网站Try Catch中文翻译 Try Catch
全称:System.Activities.Statements.TryCatch
用途:捕获你设计的流程中的指定异常类型,并显示错误通知或将其解除并继续执行。 外观:



由三部分组成:

1.Try - 放编写的流程(该流程有可能发生你未写入流程逻辑的错误)。

2.Catches - 发生错误时要执行的Activity或Activity集。异常 - 要查找的异常类型。请注意,您可以添加多个类型的异常。



3.Finally- Try Catch块之后要执行的Activity或Activity集。只有在没有抛出异常或发生错误并且在Catch部分中捕获时,才会执行此部分。

注意: 如果Activities放在Try Catch的Try部分中,并且Continue On
Error属性的值为True,则在执行项目时不会捕获任何错误;举例如下:


属性

DisplayName - Activity的显示名称。Private - 如果选中,则不再以Verbose级别记录变量和参数的值。
技巧:按快捷键“Ctrl + T”,将所选的activity置于Try Catch的Try部分内。
  1. 示例
复制代码
为了更好地理解Try Catch的用法,我们创建了一个自动化程序,它从随机名称生成器网站收集多个名称并将它们写入Excel电子表格中。
点击UiPath英文网站的这里,可以下载初始工作流程。(运行会出程序异常) Build DataTable 创建一个用于存储所收集名称的表。
调用另一个工作流来读取Web数据。 最后,Excel application scope用于在Excel文件中写入收集的信息。
首先,让我们运行自动化来检查是否有任何错误。 请注意,将显示“工作流异常”界面:


    该异常类型字段告诉我们是什么问题,在Try Catch的Catches部分中,用作在工作流程执行期间查找的异常类型。
    正如您在上面的屏幕截图中看到的,在运行示例工作流时,AttachBrowser容器选择器似乎存在问题。问题是选择器无法使用“生成随机名称
    伪名称生成器”名称来标识浏览器窗口。 要捕获这个异常,需要进行以下操作:
    1.从Activities面板中拖一个“Try Catch”到流程编辑区。
    2.在Try Catch的Try部分中放一个Invoke(引用了一个文件叫readWebData.xaml)。Try会监视Invoke,当它出现异常时进行捕捉。


    3.在“Catches”部分中,从下拉列表中选择UiPath.Core.SelectorNotFoundException。如果没有找到这个异常类型,点击“Browse
    and Select a .Net Type”,在弹出窗口中找到它。



    4.可选操作。您可以在“Catches”部分中添加一个“Message Box”Activity,在Message Box的“内容”字段中填写引号之间的信息性消息,在我们的示例中“Internet Explorer”已关闭。
    它现在将打开以继续工作流程执行。这意味着每当捕获到异常时,都会显示此消息框,以通知用户浏览器即将打开,以便成功执行工作流。



    5.拖个“Element Exists”Activity到“Finally”部分中。 “ElementExists”Activity用于检查InternetExplorer是否打开了我们需要的网址https://www.fakenamegenerator.com。
    6.打开Internet Explorer并访问前面提到的网址。
    7.使用Indicate on screen功能选择Internet Explorer窗口。
    8.选择“Element Exists”Activity并编辑其选择器,选择器内容是这样。 此选择器确保“Element
    Exists”Activity仅查找上述页面打开的InternetExplorer窗口。
    9.在Output属性中,创建一个具有相关名称的变量,例如browser。这是一个布尔变量,可帮助您确定Internet Explorer是否在指示的页面上处于打开状态。
    10.在“Element Exists”Activity下添加If Activity。如果Internet Explorer已关闭(通过browser的值来判断),则打开Internet Explorer,否则继续工作流。
    11.在If Activity的Condition中,写入browser=false。此条件用于验证浏览器是否已打开,并根据其值执行其他操作。
    12.在Then部分中拖入OpenBrowser Activity。如果满足条件(浏览器已关闭),则使用“Open Browser”Activity打开它,从而不影响工作流程。
    13.在“Open Browser”的Url字段中键入https://www.fakenamegenerator.com。
    14.Else部分留空,以便如果已在Internet Explorer打开指定的网站,则工作流按预期继续。
    运行工作流并注意以下其中一项:


?如果Internet Explorer已关闭 - 将通知用户Internet Explorer即将打开,以便工作流程可以继续。浏览器打开,所有预期的数据都被收集并写入Excel文件。

?如果Internet Explorer已打开 - 工作流程按预期执行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-27 05:56 , Processed in 0.091619 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表