Друзья, помогите объединить два снипета. Первый код, ищет среди одинаковых элементов на странице, тот который видимый, и если находит, выходит по зелёной. Второй код, ждёт появления элемента в течении заданного времени, если не находит, выходит по красной. То есть нужно, что бы код в течении заданного времени, с какой-то периодичностью, проходился по всем найденным элементам (возможно и их отсутствие), ожидая появления видимого. Если в течении заданного времени не нашёл, то выходил по красной, если нашёл, то делал бы клик по найденному элементу и выводил в переменную его номер.
Первый код взят от сюда.
Первый код взят от сюда.
C#:
var tab = instance.ActiveTab;
//Ищем коллекцию элементов по заданным атрибутам
var col = tab.FindElementsByAttribute("div", "class", "uix", "regexp");
//Создаём результирующий элемент
var elResult = tab.FindElementByXPath("//sngvuyrbuy",0);
//Если в коллекции есть элементы
if (col.Count>0)
{
//В цикле проверяем каждый элемент коллекции
foreach (var el in col.Elements)
{
//Получаем значения topInBrowser и leftInBrowser
int topInBrowser = int.Parse(el.GetAttribute("topInBrowser"));
int leftInBrowser = int.Parse(el.GetAttribute("leftInBrowser"));
//Если элемент видимый
if (el.Height>0 && el.Width>0 && topInBrowser>=0 && leftInBrowser>=0)
{
//Присваиваем результирующему элементу текущий
elResult = el;
//Выходим из цикла проверки
break;
}
}
}
//Проверяем, нашли ли нужный элемент
if (elResult.IsNull || elResult.IsVoid)
{
throw new Exception("Видимый элемент по заданным атрибутам не найден, действие не выполнено!");
}
//Найдено
C#:
HtmlElement he;
int i = 0;
int timeout = 10;
// Ожидание появления
do
{
he = instance.ActiveTab.FindElementByAttribute("div", "class", "uix", "regexp");
Thread.Sleep(1000);
i++;
} while (he.IsVoid && i < timeout);
if (he.IsVoid) throw new Exception("Не найдено");
//Найдено