【问题标题】:codedui checkbox checked c#codedui 复选框选中 c#
【发布时间】:2016-05-11 11:01:58
【问题描述】:

我想使用 CodedUI 在 html 表单上选择(检查)多个复选框,如下所示一些想法谢谢:

    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>

【问题讨论】:

    标签: c# checkbox


    【解决方案1】:
        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;
    

    对其他两个复选框执行相同操作。

    【讨论】:

      【解决方案2】:

      嗯,这取决于你到底想做什么。如果可能,请为每个复选框添加一个标识符,以便您更轻松地识别它。如果你不能,但你可以假设总是有 x 个以相同顺序排列的复选框,那么你仍然可以让它工作。

      1. 添加标识符
          <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);
      
      1. 查找所有并迭代

        var checkBoxesLookupFunc = () => new HtmlCheckBox(tableRow).FindMatchingControls().Cast();

        HtmlCheckBox firstBox = checkBoxesLookupFunc().First();

        HtmlCheckBox secondBox = checkBoxesLookupFunc().Skip(1).First();

        HtmlCheckBoxthirdBox = checkBoxesLookupFunc().Skip(2).First();

      您必须使用返回新搜索集合的函数,因为对象似乎无法再次查找。我认为这与查找匹配控件时未正确设置控件的查询路径的内部存储有关。

      我会考虑在编码的 ui 上使用抽象来帮助编写选择器。我有 my own 库来帮助解决这个问题,这是一组简单的编码 ui 扩展。使用扩展,你会写

      var firstBox = browser.Find<HtmlCheckBox>().WithDataAttribute("automation-name", "firstBox");
      var firstBox = browser.FindAll<HtmlCheckBox>().First();
      

      还有其他库提供使用jquery 进行搜索的功能。

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 2012-11-01
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多