Сахи: Try-catch не может обработать «Параметр, переданный в xyz, не был найден в браузере» ошибка?

Я запускаю все свои скрипты через .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
    ...
}

Теперь все это работает отлично, за исключением одного: он не повторяется, когда обнаруживает отсутствующий элемент, который при нормальных обстоятельствах прервал бы все сценарии. Он просто игнорирует ошибку и переходит к следующей строке пакета. Как мне заставить мой скрипт повторить попытку до двух раз, прежде чем двигаться дальше, если я не знаю, какая часть (если есть) выйдет из строя и когда?


person hiyosilver    schedule 23.04.2014    source источник


Ответы (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 Исключения в JavaScript

С уважением, Ворми

person globalworming    schedule 24.04.2014
comment
Привет, globalworming, вы попали в точку с отдельными блоками try-catch. Это было моим первоначальным намерением. Есть три проблемы: 1. У меня нет возможности узнать, какие части выйдут из строя (в основном это связано с тайм-аутом, потому что тестовая система может быть медленной и ненадежной). 2. Даже если бы я это сделал, я понятия не имею, как бы я конкретно решил эти проблемы (нужно ли мне как-то их идентифицировать? Как я могу узнать, что именно «называется» ошибкой?). 3. Для меня было бы много надоедливой дополнительной работы, чтобы настроить это для каждого отдельного скрипта. :) - person hiyosilver; 24.04.2014
comment
Сахи бросает такие объекты, как {message: _setValue [...] Ошибка: первый параметр [...] не найден [...], debugInfo: [..]}); Вы можете определить конкретные ошибки, сопоставив сообщение типа $ e.message.match (не найдено). Вы также можете создавать свои собственные исключения, чтобы упростить идентификацию. Что именно делать с ошибками ... зависит. Я пытаюсь обновить свой ответ, чтобы решить эту проблему. - person globalworming; 24.04.2014
comment
Привет, извините, что открываю это снова, но я не думаю, что моя проблема требует отдельного вопроса: у вас есть идея, как я могу заставить мой try-catch игнорировать ошибки утверждения? То есть, если скрипт не обнаружил ошибок, кроме ошибок утверждения, игнорировать их и не запускать ловушку? - person hiyosilver; 25.04.2014
comment
Mh, просматривая мои журналы снова, кажется, что сбои утверждений периодически обнаруживаются, а затем не обнаруживаются. Кажется, в этом нет никакой закономерности, иногда ловушка срабатывает, иногда нет ... но спасибо, что приложили усилия еще раз. Я уже сильно подозревал, что мне придется с этим жить. - person hiyosilver; 28.04.2014