Цикл while

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
У меня происходит зацикливание while. Я не знаю это мой промох, или глюк системы.
Мой код:
Код:
    var chk1 = instance.ActiveTab.FindElementByAttribute(
        "span",
        "id",
        "as-info",
        "regexp",
        0
    );
    while (!chk1.IsVoid)
        System.Threading.Thread.Sleep(1000);
Мое условие, такое: Пока на странице находится определенный элемент, ждем 1 сек.
Я проверял, этот элемент, он есть а потом он пропадает. А вот while заклинивает.

В чем может быть проблема, подскажите пожалуйста.
 

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 771
Благодарностей
1 184
Баллы
113

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
Мне не обязательно делать первое действие, мне пожно сделать проверку и потом делать или не делать. Потому мне нужен while. Почему он зависает???
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
Вот специально состряпал кусок кода, для теста. И все равно система зависает от while; Вернее не система, а ProjectMaker

Код:
instance.ClearCache();
instance.ClearCookie();

string url = project.Variables["url"].Value;
string subdomain = project.Variables["subdomain"].Value;

var tab = instance.ActiveTab;

tab.Navigate(url,string.Empty);

if (tab.IsBusy)
    tab.WaitDownloading();

var input = tab.FindElementByAttribute(
    "input:text",
    "id",
    "csite",
    "regexp",
    0
);
var button = tab.FindElementByAttribute(
    "input:submit",
    "name",
    "csubmit",
    "regexp",
    0
);

input.SetAttribute("value",subdomain);
button.RiseEvent("click","Full");

if (tab.IsBusy)
    tab.WaitDownloading();

var element = tab.FindElementByAttribute(
    "span",
    "id",
    "as-info",
    "regexp",
    0
);

while (!element.IsVoid)
{
    System.Threading.Thread.Sleep(1000);
}
if(tab.IsBusy)
    tab.WaitDownloading();
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
Подскажите в чем прикол????
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 310
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

Подскажите в чем прикол????
какой прикол?
как состряпал так оно и работает.
даже доки не почитав.

FindElementByAttribute Method (Document)

IsVoid Property (Document)


Remarks
If html element was not found then this method returns the HtmlElement object in which IsVoid or IsNill property is "true".

Код:
while (!chk1.IsVoid)
разберись в что у тебя тут и поймешь почему у тебя зацикливание
 
  • Спасибо
Реакции: aluminoter

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
какой прикол?
как состряпал так оно и работает.
даже доки не почитав.

FindElementByAttribute Method (Document)

IsVoid Property (Document)



Код:
while (!chk1.IsVoid)
разберись в что у тебя тут и поймешь почему у тебя зацикливание
Да я эту ремарку не прочитал. А что же делать, как мне проверить существование элемента правильно и комфортно.
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
Да но самое интересное, если без while проверить element.IsVoid - он выдает все правильно, когда элемент есть он выдает что есть, когда нет выдает что нет.
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
Нашел вот такой вариант, и он рабочий.

Код:
while (!instance.ActiveTab.PageText.Contains("Информация о сайте"))
    System.Threading.Thread.Sleep(1000);
Но может есть еще проще вариант или красивее??
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
если вы такой код будете использовать, и на странице этого текста не будет, у вас будет висячий процесс, который даже прерыванием шаблона не остановить.
Циклы без стопов это пипец
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
если вы такой код будете использовать, и на странице этого текста не будет, у вас будет висячий процесс, который даже прерыванием шаблона не остановить.
Циклы без стопов это пипец
А как надо правильно???
Просто страница иногда загружаеться очень быстро, а иногода сайт перегружен и можно ждать и минуту и две. Если бы я знал точно что хотябы сек. за 30 все выполнится, я бы воспользовался for.
А так, как сделать правильно STOP!!!
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
делать цикл for
пор успеху внутри его же прервать можно с помощью break;
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
не знаю зачем вам while
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
528
Баллы
93
А как надо правильно???
Просто страница иногда загружаеться очень быстро, а иногода сайт перегружен и можно ждать и минуту и две. Если бы я знал точно что хотябы сек. за 30 все выполнится, я бы воспользовался for.
А так, как сделать правильно STOP!!!
Если проблема только в том, что Вы не можете понять когда до конца загрузиться страница через 5 сек или 2 мин, то можно воспользоваться кодом:
instance.ActiveTab.WaitDownloading();
Дождется окончания загрузки страницы.
 

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Благодарностей
39
Баллы
28
Если проблема только в том, что Вы не можете понять когда до конца загрузиться страница через 5 сек или 2 мин, то можно воспользоваться кодом:
instance.ActiveTab.WaitDownloading();
Дождется окончания загрузки страницы.
Ну не настолько я уже дуб, чтобы такого не знать. Подгрузка идет ajax.
 

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