编码 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();
}
我的测试条件是点击单元格中的超级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();
}