我有以下HTML
`<table id="tableRepeat44" class="scaledTableGroup">
<tbody>
<tr>
<tr class="grpTableRegRow">
<td class="borderCell" title="Strongly Disagree">
<input id="QID16108TAG1" value="1" name="QID16108TAG" type="radio">
<td class="borderCell" title="Disagree">
<input id="QID16108TAG2" value="2" name="QID16108TAG" type="radio">
<td class="borderCell" title="Somewhat Disagree">
<input id="QID16108TAG3" value="3" name="QID16108TAG" type="radio">
<td class="borderCell" title="Somewhat Agree">
<input id="QID16108TAG4" value="4" name="QID16108TAG" type="radio">
<td class="borderCell" title="Agree">
<input id="QID16108TAG5" value="5" name="QID16108TAG" type="radio">
<td class="borderCell" title="Strongly Agree">
<input id="QID16108TAG6" value="6" name="QID16108TAG" type="radio">
<td class="questionColumn">
<span id="lblsubq16108_7" class="Answer">This is a question. </span>
</td>
</tr>
<tr class="grpTableAltRow">
<tr class="grpTableRegRow">
<tr class="grpTableAltRow">
</tbody>
</table>`
每行包含与展开的第一行相同的语法。我想通过CodedUI做的是获取所有问题的文本(例如td:nth-of-type(7)&gt; span || class =“Answer”)然后导航到父行,以便我可以访问Agree / Disagree单选按钮tds并根据传入的参数进行选择。
我尝试了各种
HtmlCustom questionsTable = new HtmlCustom(browser);
HtmlControl controls = new HtmlControl(questionsTable);
if (howToAnswer.Trim().ToLower() == "correct")
{
questionsTable.SearchProperties[HtmlCustom.PropertyNames.TagName] = "Tbody";
controls.SearchProperties.Add(HtmlControl.PropertyNames.Class, "Answer");
UITestControlCollection collection = controls.FindMatchingControls();
foreach (UITestControl answers in collection)
{
Debug.Write(answers);
}
}
它为表格中的每一行产生了ControlType [Pane] ClassName [HtmlPane] TagName [SPAN], UniqueIdentifier [154] Id [lblsubq16172_7] Name []
。所以我很接近,但我无法弄清楚如何获取.InnerText
的{{1}}无法访问的文字。
要解决的最后一项是如何在保持对该特定行的引用的同时来回导航?
答案 0 :(得分:1)
这实际上是一个非常酷的问题。请记住,Coded UI中DOM中的所有元素都有一个父元素和一个子集合。
简而言之,您要做的是:
如果您不能在迭代表中的每一行时选择正确的答案,那么最后一步只需要 。在我的书中,我宁愿:
这有意义吗?如果这有用,或者您需要更多细节,请告诉我。我没有我的帮助方法代码,但它非常简单。类似的东西:
public static UiTestControl GetSiblingByClass (UiTestControl ctrl, string class) {
var parent = ctrl.Parent;
var controlToReturn = new UiTestControl(parent);
controlToReturn.SearchProperties[HtmlControl.PropertyNames.Class] = class;
return controlToReturn;
}