Цикл while

  • Автор темы Автор темы aluminoter
  • Дата начала Дата начала

aluminoter

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

Мое условие, такое: Пока на странице находится определенный элемент, ждем 1 сек.
Я проверял, этот элемент, он есть а потом он пропадает. А вот while заклинивает.

В чем может быть проблема, подскажите пожалуйста.
 
Мне не обязательно делать первое действие, мне пожно сделать проверку и потом делать или не делать. Потому мне нужен while. Почему он зависает???
 
Вот специально состряпал кусок кода, для теста. И все равно система зависает от 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();
 
Подскажите в чем прикол????
 
Подскажите в чем прикол????
какой прикол?
как состряпал так оно и работает.
даже доки не почитав.

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
какой прикол?
как состряпал так оно и работает.
даже доки не почитав.

FindElementByAttribute Method (Document)

IsVoid Property (Document)



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

Код:
Развернуть Свернуть Копировать
while (!instance.ActiveTab.PageText.Contains("Информация о сайте"))
    System.Threading.Thread.Sleep(1000);

Но может есть еще проще вариант или красивее??
 
если вы такой код будете использовать, и на странице этого текста не будет, у вас будет висячий процесс, который даже прерыванием шаблона не остановить.
Циклы без стопов это пипец
 
если вы такой код будете использовать, и на странице этого текста не будет, у вас будет висячий процесс, который даже прерыванием шаблона не остановить.
Циклы без стопов это пипец

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

Ну не настолько я уже дуб, чтобы такого не знать. Подгрузка идет ajax.
 

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