Приму идеи по модификации шаблона. Хочу знать как ещё это можно выполнить, помимо.

Уровень исполнения

  • Г@вн@к@д

    Голосов: 0 0,0%
  • Вполне норм для новичка

    Голосов: 0 0,0%
  • Отсутствует базовое понимание логики/алгоритмов/e.t.c иди читай лит-ру

    Голосов: 0 0,0%

  • Всего проголосовало
    0
  • Опрос закрыт .

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
История: пишу C# для взаимодействия с определенными элементами на странице сервиса, в т.ч. и с динамическими, которые то появляются то исчезают (пометки в коде). Логика ясна и всё работает, но интересует - г@вн@к@д это или нормальное исполнение? За все мнения и любые идеи и предложения - заранее спасибо за потраченное время. Особенно интересует исполнение цикла в конце.

P.S. Воздержитесь пожалуйста от возгласов "Если код работает - чё ты мозги людям трепешь?". Благодарю.
C#:
//Шаг 1. После загрузки страницы выбираю все кнопки, на которые мне нужно будет потом нажать. Объявил коллекцию хтмл элементов span1;
List<HtmlElement> span1 = instance.ActiveTab.FindElementsByXPath("//div[@id='932647']/div[contains(@class, 'child-queries')]/div/p/span[2]/span[3]").ToList();
//Здесь будет цикл для каждого элемента коллекции span1 - рассмотрим на примере.
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(span1[0]);  // - веду мышку...
instance.ActiveTab.FullEmulationMouseClick("left","click"); // - кликаю на элемент (далее не комментирую)
System.Threading.Thread.Sleep(200); // лёгкий вздох при ожидании загрузки нового элемента
HtmlElement getwords = instance.ActiveTab.FindElementByXPath("//span[contains(@class, 'getwords')]",0); // на страницу подгрузился новый элемент, ранее не существовавший. Далее аналогичный предыдущему ход
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(getwords);
instance.ActiveTab.FullEmulationMouseClick("left","click");
System.Threading.Thread.Sleep(200);
List<HtmlElement> rounds = instance.ActiveTab.FindElementsByXPath("//p/label[2]").ToList(); // появляется окошко с инпутами (ранее недоступными). Элементы на которые нужно нажать - 3 штуки. round, checkbox, button.
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(rounds[1]);
instance.ActiveTab.FullEmulationMouseClick("left","click");
List<HtmlElement> checkbox = instance.ActiveTab.FindElementsByXPath("//p/div[contains(@class, 'jq-checkbox')]").ToList();
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(checkbox[0]);
instance.ActiveTab.FullEmulationMouseClick("left","click");
List<HtmlElement> button = instance.ActiveTab.FindElementsByXPath("//div[contains(@class, 'ui-dialog-buttonset')]/button[contains(@class, 'ui-button ui-corner-all ui-widget')]").ToList();
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(button[0]);
instance.ActiveTab.FullEmulationMouseClick("left","click");
System.Threading.Thread.Sleep(500); // Жду подгрузки нового окошка, в котором происходит скрипт, выдающий в конце ссылку на результат.
//Входим в цикл ожидания
for(int i = 0 ; i < 120 ; i++) // 120 итераций
{
    System.Threading.Thread.Sleep(1000); // максимальное время ожидания - 120*1000 = 2 минуты;
    List<HtmlElement> load = instance.ActiveTab.FindElementsByXPath("//div[contains(@class, 'load')]/div").ToList(); // ищу ранее не существовавщий элемент
    if(load.Count == 0) i = 120; // Если он отсутствует - имитирую конец цикла
    else continue; // если присутствует - новая итерация до выполнения условия
}
/* Далее пойдет проверка на существование ссылки, если нет - хочу запустить цикл ожидания заново. Если 2й провал (за 4 минуты уж точно должно выполниться) - ошибка сервиса и перевыполнение с начала..
Если существует - клик на ссылку (по ранее указанному алгоритму и дальнейшая работа. */
 
Последнее редактирование:
  • Спасибо
Реакции: Range8Hero

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Сколько ответов))))
1) Сам допетрил, что хотя бы л.клик можно укоротить вызовом через запись в переменную. (просто сразу об этом не подумал)
2) Похоже, определение пространств единично, и в цикле работать не должно. Нужно будет инициировать переопределение переменных... (или нет)
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 674
Благодарностей
1 859
Баллы
113
Чтобы сократить написание кода можно вынести instance.ActiveTab в отдельный объект например так: Tab tab = instance.ActiveTab; и тогда запись вида instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(span1[0]); можно записать короче: tab.FullEmulationMouseMoveToHtmlElement(span1[0]);
Что касается цикла, то выходить из цикла лучше по break; вместо присваивания конечного значения итерации цикла.
Очень рекомендую не лениться и подтянуть теорию по основам C#, не важно из каких источников (видео, статьи и т.п.), чистота кода придет с опытом, главное понимание основ.

Сколько ответов))))
Не нужно думать, что сразу все начнут отвечать и помогать )))
 
  • Спасибо
Реакции: orka13 и TwistDanceR

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Чтобы сократить написание кода можно вынести instance.ActiveTab в отдельный объект например так: Tab tab = instance.ActiveTab; и тогда запись вида instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(span1[0]); можно записать короче: tab.FullEmulationMouseMoveToHtmlElement(span1[0]);
Что касается цикла, то выходить из цикла лучше по break; вместо присваивания конечного значения итерации цикла.
Очень рекомендую не лениться и подтянуть теорию по основам C#, не важно из каких источников (видео, статьи и т.п.), чистота кода придет с опытом, главное понимание основ.
Благодарю, сделаем.
Не нужно думать, что сразу все начнут отвечать и помогать )))
Жаааль жааааль )))
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 674
Благодарностей
1 859
Баллы
113

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
348
Благодарностей
51
Баллы
28

radv

Client
Регистрация
11.05.2015
Сообщения
3 674
Благодарностей
1 859
Баллы
113
а какой смысл цитировать мое сообщение и давать ту же ссылку? :-)
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
  • Спасибо
Реакции: ukrainec2014

radv

Client
Регистрация
11.05.2015
Сообщения
3 674
Благодарностей
1 859
Баллы
113

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 942
Благодарностей
4 334
Баллы
113

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 234
Благодарностей
803
Баллы
113
А еще можно просто Thread.Sleep
 

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