Повторить кубик проекта при ошибке через n секунд

DoGo

Client
Регистрация
27.11.2020
Сообщения
30
Благодарностей
6
Баллы
8
Всем привет.
Есть ли какая-нибудь настройка, "хитрость", что если на каком-то из кубиков возникла ошибка, не сразу в bad end идти(или по красной), а попробовать выполнить этот же кубик, например через 5 секунд еще раз?

Спасибо!
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 696
Благодарностей
939
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

seregakot

Client
Регистрация
19.03.2016
Сообщения
126
Благодарностей
63
Баллы
28
да на всякий пожарный :-) что бы не бот не запутался в развилках.
я такую конструкцию просто копирую, править не охота :-)
А можно посмотреть как выглядит код "Ожидание появления элемента"
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А можно посмотреть как выглядит код "Ожидание появления элемента"
да копия кубика поиска по xpath

C#:
// входные параметры
string xpath_control = @"//input[@id='email']"; // xpath контрольного элемента
int pause = 1000;                                 // пауза между интерациями
int col_interaciy_wait_change_max = 50;          // максимальное количество интераций для ожидания элемента

// ----- ожидание -----
for (int i = 0; i<col_interaciy_wait_change_max; i++)
{
    HtmlElementCollection he_all = instance.ActiveTab.FindElementsByXPath(xpath_control);
    if (!he_all.IsVoid)
    {
        for (int k = 0; k < he_all.Count; k++)
        {
            HtmlElement he = he_all.Elements[k];
            if (!he.IsVoid)
            {
                if (he.Width>0 && he.Height>0)
                {
                    Thread.Sleep(1000);    // дополнительное ожидание после нахождения
                    return 0;
                }
            }
        }
    }
    Thread.Sleep(pause);
}
throw new Exception();
 

seregakot

Client
Регистрация
19.03.2016
Сообщения
126
Благодарностей
63
Баллы
28
да копия кубика поиска по xpath

C#:
// входные параметры
string xpath_control = @"//input[@id='email']"; // xpath контрольного элемента
int pause = 1000;                                 // пауза между интерациями
int col_interaciy_wait_change_max = 50;          // максимальное количество интераций для ожидания элемента

// ----- ожидание -----
for (int i = 0; i<col_interaciy_wait_change_max; i++)
{
    HtmlElementCollection he_all = instance.ActiveTab.FindElementsByXPath(xpath_control);
    if (!he_all.IsVoid)
    {
        for (int k = 0; k < he_all.Count; k++)
        {
            HtmlElement he = he_all.Elements[k];
            if (!he.IsVoid)
            {
                if (he.Width>0 && he.Height>0)
                {
                    Thread.Sleep(1000);    // дополнительное ожидание после нахождения
                    return 0;
                }
            }
        }
    }
    Thread.Sleep(pause);
}
throw new Exception();
Это получается я могу свой путь xpath просто прописать, и будет работать?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

DoGo

Client
Регистрация
27.11.2020
Сообщения
30
Благодарностей
6
Баллы
8
зачем хитрить ? обычная логика.

Посмотреть вложение 75763
С логикой то все ясно, я примерно так и делаю. С попаданием на конкретную страницу все просто и можно сделать обычными кубиками - загрузить сайт, проверить наличие текста, если он есть, продолжаем работать, но бывает случаи, когда нужно кликнуть на кнопку и например загрузить картинку, окно загрузки есть, а картинка не загрузилась.

В моем случае проект очень большой и вставлять на каждом кубике даже конструкцию из примера - проблема. Бывают случаи когда подтормаживает интернет, перезагружаются прокси и т.д. и тогда происходит ошибка, хотя по факту через пару секунд все уже могло быть хорошо, выставлять везде большие задержки и "петли повторных попыток" слишком громоздко. 1 проект выполняется около 30 минут и бывает, когда уже почти все готово, обрывается и вся работа в пустую.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
С логикой то все ясно, я примерно так и делаю. С попаданием на конкретную страницу все просто и можно сделать обычными кубиками - загрузить сайт, проверить наличие текста, если он есть, продолжаем работать, но бывает случаи, когда нужно кликнуть на кнопку и например загрузить картинку, окно загрузки есть, а картинка не загрузилась.

В моем случае проект очень большой и вставлять на каждом кубике даже конструкцию из примера - проблема. Бывают случаи когда подтормаживает интернет, перезагружаются прокси и т.д. и тогда происходит ошибка, хотя по факту через пару секунд все уже могло быть хорошо, выставлять везде большие задержки и "петли повторных попыток" слишком громоздко. 1 проект выполняется около 30 минут и бывает, когда уже почти все готово, обрывается и вся работа в пустую.
в чем проблема сделать петли повтора в виде подпроекта/плагина ?
 

DoGo

Client
Регистрация
27.11.2020
Сообщения
30
Благодарностей
6
Баллы
8
в чем проблема сделать петли повтора в виде подпроекта/плагина ?
Наверное, в том что я новичок, поэтому и задаю вопросы.

Можете пояснить подробнее?
Создается отдельный проект и запускается в случае ошибки или как?
Спасибо.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Наверное, в том что я новичок, поэтому и задаю вопросы.

Можете пояснить подробнее?
Создается отдельный проект и запускается в случае ошибки или как?
Спасибо.
всю логику по повтору, проверки, перезагрузки можно вынести в подпроект/плагин и передавая разные входные настройки можно неплохо так уменьшить основной проект.
например для своих проектов, где не надо продавать, я активно использую плагин , в который я запихал много полезного функционала.

75778


можно просто использовать подпроект. некоторые выносят повторяющиеся действия в общий код c# , что тоже очень сильно может уменьшить проект.
Возможности есть, используйте их.
 
  • Спасибо
Реакции: seregakot, Igorii и DoGo

seregakot

Client
Регистрация
19.03.2016
Сообщения
126
Благодарностей
63
Баллы
28
@Phoenix78 Привет
а подскажи пожалуйста код этого кубика , хочу так же сделать проверку , т.к тоже встречается такое
За ранее спасибо

2021-06-12_09-07-23.png
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
@Phoenix78 Привет
а подскажи пожалуйста код этого кубика , хочу так же сделать проверку , т.к тоже встречается такое
За ранее спасибо
C#:
int Count_Max = 3;     
int Count_Check = 0 ; try{ Count_Check = int.Parse(project.Variables["Counter_Wait_Load_Data"].Value) +1 ;} catch{}     
project.Variables["Counter_Wait_Load_Data"].Value = Count_Check.ToString();               
if ( Count_Check >= Count_Max ) throw new Exception();
else return 0;
 

seregakot

Client
Регистрация
19.03.2016
Сообщения
126
Благодарностей
63
Баллы
28
C#:
int Count_Max = 3;    
int Count_Check = 0 ; try{ Count_Check = int.Parse(project.Variables["Counter_Wait_Load_Data"].Value) +1 ;} catch{}    
project.Variables["Counter_Wait_Load_Data"].Value = Count_Check.ToString();              
if ( Count_Check >= Count_Max ) throw new Exception();
else return 0;
Спасибо большое
 

Igorii

Client
Регистрация
21.02.2015
Сообщения
371
Благодарностей
297
Баллы
63
для своих проектов, где не надо продавать, я активно использую плагин , в который я запихал много полезного функционала.

Посмотреть вложение 75778

можно просто использовать подпроект.
@Phoenix78, полезный плагин! Есть возможность поделиться? Буду благодарен!)
 

seregakot

Client
Регистрация
19.03.2016
Сообщения
126
Благодарностей
63
Баллы
28
@Phoenix78 Я б тоже не отказался б
посмотреть как устроено все , то удобная штука получается , не надо кубики тягать с проекта в проект
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
@Phoenix78, полезный плагин! Есть возможность поделиться? Буду благодарен!)
@Phoenix78 Я б тоже не отказался б
посмотреть как устроено все , то удобная штука получается , не надо кубики тягать с проекта в проект
он платный.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)