- Регистрация
- 30.05.2019
- Сообщения
- 479
- Благодарностей
- 200
- Баллы
- 43
История: пишу C# для взаимодействия с определенными элементами на странице сервиса, в т.ч. и с динамическими, которые то появляются то исчезают (пометки в коде). Логика ясна и всё работает, но интересует - г@вн@к@д это или нормальное исполнение? За все мнения и любые идеи и предложения - заранее спасибо за потраченное время. Особенно интересует исполнение цикла в конце.
P.S. Воздержитесь пожалуйста от возгласов "Если код работает - чё ты мозги людям трепешь?". Благодарю.
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 минуты уж точно должно выполниться) - ошибка сервиса и перевыполнение с начала..
Если существует - клик на ссылку (по ранее указанному алгоритму и дальнейшая работа. */
Последнее редактирование: