Код C#, работает как-то неправильно.

muhyrla

Client
Регистрация
31.07.2020
Сообщения
136
Благодарностей
7
Баллы
18
C#:
HtmlElement he;
for(int i=0;i<5;i++)
{
    he = instance.ActiveTab.FindElementByAttribute("span","innertext","-","regexp",0);
    if(!he.IsVoid)
    {
        break;
    }
    System.Threading.Thread.Sleep(1000);
}
Код направлен на проверку нахождения элемента на текущей странице, но если элемент не находится он всеравно выходит по зеленой ветке, как сделать так чтобы он выходил по красной в случае "ненахода"?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
если элемент не находится он всеравно выходит по зеленой ветке, как сделать так чтобы он выходил по красной в случае "ненахода"?
Так у вас в коде нет условия выходить по красной ветке. Код работает правильно. Он выходит из цикла без ошибок.

Для выхода по красной ветке нужно создать ошибку, используйте
C#:
throw new Exception( "Элемент не найден.");
вместо break;
 
  • Спасибо
Реакции: Yuriy Zymlex

muhyrla

Client
Регистрация
31.07.2020
Сообщения
136
Благодарностей
7
Баллы
18
Так у вас в коде нет условия выходить по красной ветке. Код работает правильно. Он выходит из цикла без ошибок.

Для выхода по красной ветке нужно создать ошибку, используйте
C#:
throw new Exception( "Элемент не найден.");
вместо break;
C#:
HtmlElement he;
for(int i=0;i<10;i++)
{
     he = instance.ActiveTab.FindElementByAttribute("span","innertext","-","regexp",1);
     if(!he.IsVoid)
    {
      throw new Exception( "Элемент не найден.");
    }
    System.Threading.Thread.Sleep(1000);
}
Если код должен выглядеть по новому так, то по красной ветке он идти не хочет :(
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Проверяйте логику и наличие элементов, может внутрь if не заходит и условие не срабатывает. Или просто используйте отдельную переменную в которую помещайте значение, нашелся элемент или нет, а потом сравнивайте значение из этой переменной.

Заметил, что цикл у вас есть, а значение i внутри цикла, нигде не используется.
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Что-то типа того:
C#:
HtmlElement he;
for(int i=0;i<5;i++)
{
    he = instance.ActiveTab.FindElementByAttribute("span","innertext","-","regexp",0);
    if(!he.IsVoid)
    {
        break; //если элемент нашли — цикл прерываем
    }
    //Если в последней итерации цикла элемент не найден — исключение
    if(i=4 && he.IsVoid) throw new Exception("HtmlElement not found");
   
    System.Threading.Thread.Sleep(1000);
}
 

alex8020

Client
Регистрация
16.08.2016
Сообщения
38
Благодарностей
39
Баллы
18
Выходим по красной, если элемента нет
C#:
HtmlElement he;
for(int i=0;i<10;i++)
{
     he = instance.ActiveTab.FindElementByAttribute("span","innertext","-","regexp",1);
     if(he.IsVoid)
    {
      throw new Exception( "Элемент не найден.");
    }
    System.Threading.Thread.Sleep(1000);
}
Выходим по красной, если элемент есть
C#:
HtmlElement he;
for(int i=0;i<10;i++)
{
     he = instance.ActiveTab.FindElementByAttribute("span","innertext","-","regexp",1);
     if(!he.IsVoid)
    {
      throw new Exception( "Элемент найден.");
    }
    System.Threading.Thread.Sleep(1000);
}
 

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