Выполнение С# кода зацикливается, почему?

ikibostus

Client
Регистрация
27.09.2015
Сообщения
256
Благодарностей
26
Баллы
28
Привет, друзья!
Нужно, что бы шаблон ждал загрузки меню в Гугл таблице, потом кликал по вкладке Format, затем в раскрывшемся меню по пункту Bold (для примера). Все выполняется отлично, но циклично, а нужно один раз. Как быть?

Код:
for (int i=0; i<5; i++)
{
    var elementMenu = instance.ActiveTab.FindElementByAttribute("div", "innertext", "^Format$", "regexp", 0);
       
        if (!elementMenu.IsVoid)
            {
                elementMenu.RiseEvent("click", "Full");
                var elementClear = instance.ActiveTab.FindElementByAttribute("div", "innertext", "^Bold$", "regexp", 0);
                    for (int j=0; j<3; j++)
                        {
                        if (!elementClear.IsVoid)
                            {
                                elementClear.RiseEvent("click", "Full");                               
                            }
                            else
                            {
                                System.Threading.Thread.Sleep(1000);
                            }   
                        }
            }
    else
    {
        System.Threading.Thread.Sleep(1000);
    }
}
 
Последнее редактирование:

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
может стоит код хотя бы привести к читабельному виду?
 
  • Спасибо
Реакции: doc

ikibostus

Client
Регистрация
27.09.2015
Сообщения
256
Благодарностей
26
Баллы
28

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Привет, друзья!
Нужно, что бы шаблон ждал загрузки меню в Гугл таблице, потом кликал по вкладке Format, затем в раскрывшемся меню по пункту Bold (для примера). Все выполняется отлично, но циклично, а нужно один раз. Как быть?

Код:
for (int i=0; i<5; i++)
{
    var elementMenu = instance.ActiveTab.FindElementByAttribute("div", "innertext", "^Format$", "regexp", 0);
      
        if (!elementMenu.IsVoid)
            {
                elementMenu.RiseEvent("click", "Full");
                var elementClear = instance.ActiveTab.FindElementByAttribute("div", "innertext", "^Bold$", "regexp", 0);
                    for (int j=0; j<3; j++)
                        {
                        if (!elementClear.IsVoid)
                            {
                                elementClear.RiseEvent("click", "Full");                              
                            }
                            else
                            {
                                System.Threading.Thread.Sleep(1000);
                            }  
                        }
            }
    else
    {
        System.Threading.Thread.Sleep(1000);
    }
}
Код:
for (int i=0; i<5; i++)
{
    var elementMenu = instance.ActiveTab.FindElementByAttribute("div", "innertext", "^Format$", "regexp", 0);
       
        if (!elementMenu.IsVoid)
            {
                elementMenu.RiseEvent("click", "Full");
                var elementClear = instance.ActiveTab.FindElementByAttribute("div", "innertext", "^Bold$", "regexp", 0);
                    for (int j=0; j<3; j++)
                        {
                        if (!elementClear.IsVoid)
                            {
                                elementClear.RiseEvent("click", "Full");       
return "OK";                     
                            }
                            else
                            {
                                System.Threading.Thread.Sleep(1000);
                            } 
                        }
            }
    else
    {
        System.Threading.Thread.Sleep(1000);
    }
}
 
  • Спасибо
Реакции: ikibostus

ikibostus

Client
Регистрация
27.09.2015
Сообщения
256
Благодарностей
26
Баллы
28
Подскажите, если выполняю следующий сниппет в Гугл таблицах, почему то происходит двойной клик по пункту меню, хотя в коде вроде все правильно. В чем может быть причина?
Код:
for (int i=0; i<3; i++)
{
    var elementMenu = instance.ActiveTab.FindElementByAttribute("div", "innerhtml", "^Меню$", "regexp", 0);
       
        if (!elementMenu.IsVoid)
            {
                elementMenu.RiseEvent("click", "Full");
                var elementSubj = instance.ActiveTab.FindElementsByAttribute("div", "innerhtml", "^Очистить таблицу$", "regexp");
                for (int n = 0; n < elementSubj.Count; n++)
                {
                var height = elementSubj.GetByNumber(n).GetAttribute("height");
                if (height!="16")
                {
                elementSubj.GetByNumber(n).RiseEvent("click", "Full");
                break;
                }
                }
            }
    else
    {
        System.Threading.Thread.Sleep(1000);
    }

}
throw new System.Exception("Элемент не найден");
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Подскажите, если выполняю следующий сниппет в Гугл таблицах, почему то происходит двойной клик по пункту меню, хотя в коде вроде все правильно. В чем может быть причина?
Код:
for (int i=0; i<3; i++)
{
    var elementMenu = instance.ActiveTab.FindElementByAttribute("div", "innerhtml", "^Меню$", "regexp", 0);
      
        if (!elementMenu.IsVoid)
            {
                elementMenu.RiseEvent("click", "Full");
                var elementSubj = instance.ActiveTab.FindElementsByAttribute("div", "innerhtml", "^Очистить таблицу$", "regexp");
                for (int n = 0; n < elementSubj.Count; n++)
                {
                var height = elementSubj.GetByNumber(n).GetAttribute("height");
                if (height!="16")
                {
                elementSubj.GetByNumber(n).RiseEvent("click", "Full");
                break;
                }
                }
            }
    else
    {
        System.Threading.Thread.Sleep(1000);
    }

}
throw new System.Exception("Элемент не найден");
Ошибка всё та же, что была и в прошлом коде.
Вместо break; используйте return, чтобы выполнение кода прекращалось.
break; обрывает только текущий цикл и при этом заходит в следующий.
 
  • Спасибо
Реакции: ikibostus

ikibostus

Client
Регистрация
27.09.2015
Сообщения
256
Благодарностей
26
Баллы
28
Ошибка всё та же, что была и в прошлом коде.
Вместо break; используйте return, чтобы выполнение кода прекращалось.
break; обрывает только текущий цикл и при этом заходит в следующий.
Я и return пробовал, все равно два раза кликает (не пойму почему, вроде логически все верно в коде) по второму элементу. Вышел из положения следующим образом - нахожу центр этого элемента и эмулирую одинарный клик по этим координатам.
 

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