我想在html表单上选择(检查)多个复选框,如下所示使用CodedUI我已经尝试过以下但我不知道如何选择一个特定的复选框,如果有人能想出来,我将非常感激一些想法谢谢:
UITestControl checkBoxes = new UITestControl(browser);
checkBoxes.TechnologyName = "Web";
checkBoxes.SearchProperties.Add("TagName", "TD");
checkBoxes.SearchProperties.Add("ControlType", "Cell");
checkBoxes.SearchProperties.Add("Name", "checkboxes[]");
// checkBoxes.SearchProperties[HtmlCheckBox.PropertyNames.Value] = "cb2";
// checkBoxes.SearchProperties.Add("InnerText", "Checkbox Items:");
checkBoxes.SetProperty("Checked", true);
<tr>
<td>
Checkbox Items:<br />
<input type="checkbox" name="checkboxes[]" value=
"cb1" />Checkbox 1
<input type="checkbox" name="checkboxes[]"
value="cb2" />Checkbox 2
<input type="checkbox" name=
"checkboxes[]" value="cb3" checked="checked" />Checkbox 3
</td>
</tr>
答案 0 :(得分:0)
HtmlCheckBox mUICheckboxesCheckBox = new HtmlCheckBox(parentControl);
#region Search Criteria for first checkBox cb1
mUICheckboxesCheckBox.SearchProperties[HtmlCheckBox.PropertyNames.Id] = null;
mUICheckboxesCheckBox.SearchProperties[HtmlCheckBox.PropertyNames.Name] = "checkboxes[]";
mUICheckboxesCheckBox.SearchProperties[HtmlCheckBox.PropertyNames.Value] = "cb1";
mUICheckboxesCheckBox.SearchProperties[HtmlCheckBox.PropertyNames.LabeledBy] = null;
mUICheckboxesCheckBox.FilterProperties[HtmlCheckBox.PropertyNames.Title] = null;
mUICheckboxesCheckBox.FilterProperties[HtmlCheckBox.PropertyNames.Class] = null;
mUICheckboxesCheckBox.FilterProperties[HtmlCheckBox.PropertyNames.ControlDefinition] = "name=\"checkboxes[]\" value=\"cb1\" type=\"ch";
mUICheckboxesCheckBox.FilterProperties[HtmlCheckBox.PropertyNames.TagInstance] = "1";
mUICheckboxesCheckBox.WindowTitles.Add("http://localhost:23159/HtmlPage1.html");
#endregion
if( mUICheckboxesCheckBox.TryFind())
mUICheckboxesCheckBox.Checked = true;
对其他两个复选框执行相同的操作。
答案 1 :(得分:0)
那么,取决于你究竟想要做什么。如果可能,请为每个复选框添加标识符,以便您可以更轻松地识别它。如果你不能,但你可以假设在同一个顺序中总有x个复选框,那么你仍然可以使它工作。
<tr>
<td>
Checkbox Items:<br />
<input type="checkbox" name="checkboxes[]" value=
"cb1" data-automation-name="firstBox" />Checkbox 1
<input type="checkbox" name="checkboxes[]"
value="cb2" data-automation-name="secondBox" />Checkbox 2
<input type="checkbox" name=
"checkboxes[]" value="cb3" data-automation-name="thirdBox" checked="checked" />Checkbox 3
</td>
</tr>
HtmlCheckBox firstBox = new HtmlCheckBox(tableRow);
firstBox.SearchProperties.Add(HtmlControl.PropertyNames.ControlDefinition, String.Format("{0}=\"{1}\"", "data-automation-name", "firstBox"), PropertyExpressionOperator.Contains);
HtmlCheckBox secondBox = new HtmlCheckBox(tableRow);
firstBox.SearchProperties.Add(HtmlControl.PropertyNames.ControlDefinition, String.Format("{0}=\"{1}\"", "data-automation-name", "secondBox"), PropertyExpressionOperator.Contains);
HtmlCheckBox thirdBox = new HtmlCheckBox(tableRow);
firstBox.SearchProperties.Add(HtmlControl.PropertyNames.ControlDefinition, String.Format("{0}=\"{1}\"", "data-automation-name", "thirdBox"), PropertyExpressionOperator.Contains);
查找全部并重复
var checkBoxesLookupFunc =()=&gt; new HtmlCheckBox(tableRow).FindMatchingControls()。Cast();
HtmlCheckBox firstBox = checkBoxesLookupFunc()。First();
HtmlCheckBox secondBox = checkBoxesLookupFunc()。跳过(1).First();
HtmlCheckBox thirdBox = checkBoxesLookupFunc()。跳过(2).First();
您必须使用返回新搜索集合的函数,因为对象似乎无法再次查找。我认为这与在执行查找匹配控件时未正确设置控件的查询路径的内部存储有关。
我会考虑在编码ui上使用抽象来帮助编写选择器。我有my own库来帮助解决这个问题,它是一个简单的扩展代码,用于编码ui。使用扩展名,你会写
var firstBox = browser.Find<HtmlCheckBox>().WithDataAttribute("automation-name", "firstBox");
var firstBox = browser.FindAll<HtmlCheckBox>().First();
还有其他库可以使用jquery进行搜索。