编码 UI - 单击动态生成的 table 单元格中的超链接

Coded UI - Clicking on a hyperlink in a table cell which is Dynamically generated

我的测试条件是点击单元格中的超级link。 --> Table 格式 Tr, Td

Table 列 姓名 -- 状态 -- link

--> 1st 我们搜索匹配名称的行。

--> 通过搜索找到行后,我们检查同一行第 2 列中的状态。

-->状态从processing变为Complete。

--> 当状态为完成时,在第 3 列中生成一个 Hyperlink。需要点击哪个。

通过F12查看源代码。 Link 作为第 3 列中单元格的子元素生成。 所以我试图找到 row.cell(2).GetChildren[0];

但由于子元素只有在生成Link时才存在,这取决于应用程序加载。

我可以保持 playback.wait();但除非它死胡同,否则不会在我的组织中使用该条件。

我正在提供搜索属性和 waitfor 控件。但这也行不通。

任何人都可以指导如何等待当前 UI 中不存在的 Link。

我的代码如下所示。

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;
  }
}

我卡在这里了。

也许您需要使用某种自定义的 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();
}