Кодированный пользовательский интерфейс - щелчок по гиперссылке в ячейке таблицы, которая создается динамически - PullRequest
0 голосов
/ 08 мая 2018

Мое условие проверки - щелкнуть гиперссылку в ячейке. -> Таблица формата Tr, Td

Столбцы таблицы Имя - Статус - ссылка

-> 1-й мы ищем строку, чтобы соответствовать имени.

-> После того, как строка найдена в результате нашего поиска, мы проверяем статус во 2-й колонке, той же строке.

-> статус изменяется с обработки на Завершено.

-> Когда статус завершен, в 3-м столбце создается гиперссылка. Который нужно нажать.

После проверки исходного кода через F12. Ссылка генерируется как дочерний элемент ячейки в 3-м столбце. Поэтому я пытаюсь найти row.cell (2). GetChildren [0];

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

я могу продолжать воспроизведение. Wait (); но это условие не должно использоваться в моей организации до тех пор, пока оно не зашло в тупик.

Я даю Свойства поиска и контроль ожидания. Но это также не работает.

Может кто-нибудь подсказать, как ждать ссылки, которой нет в пользовательском интерфейсе в настоящее время.

мой код выглядит ниже.

HtmlRow row = FindReport(reportName); // Method which finds row
VerifyStatus(reportName, status); // Method verifies status in the row and 
returns true if complete
HtmlSpan link = new HtmlSpan(row);
link.SearchProperties.Add(HtmlSpan.PropertyNames.InnerText, "Order", 
PropertyExpressionOperator.Contains);
for (int i = 0; i < 60; i++)
{
  if (!link.WaitForControlExist())
  {
   Keyboard.SendKeys(HistoryPage, "{F5}");
  }
else
  {
   Mouse.Click(row.Cells[2].GetChildren()[0]);
   return;
  }
}

Я застрял здесь.

1 Ответ

0 голосов
/ 09 мая 2018

Возможно, вам понадобится какой-нибудь пользовательский waitforcontrolexist, с вашими собственными шагами для исследования элемента управления и вашим собственным конкретным временем ожидания.

Я работаю над проектами программного обеспечения для настольных компьютеров, поэтому я не работаю над html-проектом, но думаю, что он должен работать так же.

Вот часть кода, которую я использую в более общей функции, перенастроенной для вашего случая, если это могло бы помочь:

HtmlRow row = FindReport(reportName); // Method which finds row
VerifyStatus(reportName, status); // Method verifies status in the row and returns true if complete
HtmlSpan link = new HtmlSpan(row);

int TimoutMilliSecond = 120000//as you told about 2 minutes for the link to be accessible
int count = 1;
bool ControlExist = false;

while (ControlExist == false)
{
        link.SearchProperties.Add(HtmlSpan.PropertyNames.InnerText, "Order", PropertyExpressionOperator.Contains);

        if (link != null)//null or in your case any bad state you get as result after the SearchProperties on 'link'
        {
            ControlExist = link.Exists;
        }

        if (count > TimoutMilliSecond)
        {
            Assert.Fail("The control 'link' was not found within the timout set out to: " + TimoutMilliSecond.ToString() + " Milliseconds !");
        }
        Playback.Wait(100);
        count = count + 100;
}
if (link != null)
{
    link.Find();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...