WaitFieldEmulationDelay в автоматически создаваемом коде. это баг или норм?

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
Код:
// Установка значения [22222] элементу с тэгом [input:text]
HtmlElement he = instance.GetTabByAddress("page").GetDocumentByAddress("0").FindElementByTag("form", 1).FindChildById("text");
if (he.IsVoid) {
    he = instance.GetTabByAddress("page").GetDocumentByAddress("0").FindElementByTag("form", 1).FindChildByName("text");
}
if (he.IsVoid)
    {
        he = instance.GetTabByAddress("page").GetDocumentByAddress("0").FindElementByTag("form", 1).FindChildByAttribute("input:text", "class", "input__control\\ input__input", "regexp", 0);
    }
if (he.IsVoid) {
    he = instance.GetTabByAddress("page").GetDocumentByAddress("0").FindElementByTag("form", 1).FindChildByAttribute("input:text", "fulltag", "input:text", "text", 1);
}
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Установить элементу значение "22222"
he.SetValue("22222", "Full", false);
Если что, то эмулируется в яндексе ввод в строку поиска.
Так вот, почему ожидание ввода перед самим вводом? в справке наоборот. "вышел на улицу в лыжи обутый...")))
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
И еще, какое преимущество дает определение переменной как HtmlElement вместо var? там одни и те же действия.
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
я понимаю, что классы, наследование и т.п., но смысл городить двойной огород?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 623
Благодарностей
3 425
Баллы
113
почему ожидание ввода перед самим вводом? в справке наоборот. "вышел на улицу в лыжи обутый...")))
Там всё несколько иначе должно быть.
C#:
// clear cookie
instance.ClearCookie();

// navigate to lessons.zennolab.com
instance.ActiveTab.Navigate("lessons.zennolab.com", "");

// wait for downloading
instance.ActiveTab.WaitDownloading();

// find html element
HtmlElement he = instance.ActiveTab.AllDocuments.Documents[0].FindElementByTag("textarea", 0);

// if html element not exist
if (he.IsNull && he.IsVoid) throw new Exception("he not found");;

// set input field emulation delay
instance.FieldEmulationDelay = 20000;

// restarting input delay timer for the first call WaitFieldEmulationDelay
instance.RefreshFieldEmulationDelay();

// set value
he.SetValue("It's just not a larger text for testing this method. And for showing how to use C# or PHP code for making the nice projects.", "Full", false);

// and wait if delay time has not passed
instance.WaitFieldEmulationDelay();

// but now shows message that all done
System.Windows.Forms.MessageBox.Show("All done", "End of action");
Возможно в следующей версии API, добавят этот пример.
какое преимущество дает определение переменной как HtmlElement вместо var?
Читаемость.
 
Последнее редактирование:
  • Спасибо
Реакции: linkod

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 623
Благодарностей
3 425
Баллы
113
instance.RefreshFieldEmulationDelay(); необходим для сброса таймера, отсчитывающего начало ввода, так как он стартует при запуске проекта, из-за чего отстаёт.
 
Последнее редактирование:
  • Спасибо
Реакции: Alex733 и linkod

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
  1. // restarting input delay timer for the first call WaitFieldEmulationDelay
  2. instance.RefreshFieldEmulationDelay();


  3. // and wait if delay time has not passed
  4. instance.WaitFieldEmulationDelay();

    они получаются как начало и конец задержки. А почему просто слип не использовать? )
 

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