【问题标题】:Sahi: Try-catch can't handle 'The parameter passed to xyz was not found on the browser" error?Sahi:Try-catch 无法处理“浏览器上未找到传递给 xyz 的参数”错误?
【发布时间】:2014-06-08 11:54:23
【问题描述】:

我通过一个 .suite 文件运行我的所有脚本,格式大致如下:

_include("variables.sah");
_include("functions.sah");

$a = 0;
while($a<3) {
    try {
        _navigateTo($loginpage);
        login($user, $password);
        myFunction();
        $a = 3
    }
    catch (e){
        _navigateTo($loginpage);
        login($user, $password);
        //undo changes made by myFunction()
        ...
        $a++;
        if($a<3) {
            _log("Try again");
        }
        else {
            _log("Skip to next script");
        }
    }
}

function myFunction() {
    //do this
    ...
}

现在所有这一切都运行得很好,除了一件事:它不会在遇到缺少的元素时重复,在正常情况下会中止所有脚本。它只是忽略错误并继续执行该套件的下一行。如果我不知道哪个部分(如果有)会失败以及何时失败,如何让我的脚本重试最多 2 次?

【问题讨论】:

    标签: try-catch sahi


    【解决方案1】:

    我猜你的代码看起来不错。

    我能想到的一件事是在 catch 块中抛出了异常。

    我制作了一个按预期工作的简单脚本:

    var $errors = 0;
    
    function trySet() {
      try {
        _setValue(_textbox("does not exist"), "");
      } catch ($e) {
        $errors++
        _alert($errors);
      }
    }
    
    
    for (var $i = 0; $i < 3; $i++) {
      trySet();
    }
    

    最好弄清楚你的脚本到底在哪里遇到了问题,并相应地使用单独的 try-catch 块来处理它们。你如何处理异常取决于你,但我想它会是这样的:

    try {
      login()
    } catch ($e) {
      // login failed, try again
    }
    try {
      myfunction()
    catch($e) {
      revertMyFunction()
      //try again
    }
    

    也许可以定义您自己的异常以对错误做出不同的反应,请查看此以获取有关自定义异常的更多信息:Custom Exceptions in JavaScript

    问候 虫子

    【讨论】:

    • 嗨 globalworming,您可以使用单独的 try-catch 块。这也是我的初衷。存在三个问题: 1. 我无法知道哪些部分会失败(这主要与超时有关,因为测试系统可能很慢且不可靠)。 2. 即使我这样做了,我也不知道我将如何具体解决这些问题(我是否需要以某种方式识别它们?我怎么知道错误被“称为”,究竟是什么?)。 3. 为每一个脚本设置这个对我来说意味着很多烦人的额外工作。 :)
    • Sahi 抛出像 {"message":"_setValue [...] 错误:第一个参数 [...] 未找到 [...]","debugInfo":"[ ..]"});您可以通过匹配 $e.message.match("not found") 之类的消息来识别特定错误。您也可以抛出自己的异常,更容易识别。你到底应该对错误做什么..取决于。我尝试更新我的答案来解决这个问题。
    • 嘿,很抱歉再次打开它,但我认为我的问题不值得提出自己的问题:你知道如何强制我的 try-catch 忽略断言失败吗?也就是说,如果脚本除了断言失败之外没有遇到任何错误,那么忽略那些并且不触发捕获?
    • 嗯,再次查看我的日志,似乎断言失败被间歇性捕获,然后没有被捕获。它似乎没有任何模式,有时会触发捕获有时不会触发...但是感谢您再次做出努力。我已经强烈怀疑我将不得不忍受这个。
    猜你喜欢
    • 2019-03-30
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2019-08-30
    相关资源
    最近更新 更多