Coded ui tests 从下拉列表中选择LI元素

Coded ui tests 从下拉列表中选择LI元素,coded-ui-tests,Coded Ui Tests,我的数据驱动编码ui测试有问题。我应该用csv数据替换测试中输入的信息 我可以成功地用csv数据替换登录和密码输入。。但是我无法用csv数据替换测试中选择的LI 我不知道如何选择LI,因为它似乎是一个自定义生成的控件元素,但我可能会随波逐流 HTML如下所示: <div id="cphCont_cphContAut_ddlTipoJur" class="ComboAzul" style="display:inline-block;"> <table id="cphCon

我的数据驱动编码ui测试有问题。我应该用csv数据替换测试中输入的信息

我可以成功地用csv数据替换登录和密码输入。。但是我无法用csv数据替换测试中选择的LI

我不知道如何选择LI,因为它似乎是一个自定义生成的控件元素,但我可能会随波逐流

HTML如下所示:

<div id="cphCont_cphContAut_ddlTipoJur" class="ComboAzul" style="display:inline-block;">
    <table id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_Table" class="ajax__combobox_inputcontainer" style="border-width:0px;border-style:None;border-collapse:collapse;display:inline-block;position:relative;top:5px;" cellpadding="0" cellspacing="0">
        <tbody>
            <tr>
                <td class="ajax__combobox_textboxcontainer">
                    <input name="ctl00$ctl00$cphCont$cphContAut$ddlTipoJur$ddlTipoJur_TextBox" id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_TextBox" tabindex="3" autocomplete="off" style="width: 260px; margin: 0px;" type="text">
                </td>
                <td class="ajax__combobox_buttoncontainer">
                    <button style="height: 18px; width: 18px; margin: 0px; padding: 0px; visibility: visible;" id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_Button" type="button"></button>
                    </td>
            </tr>
        </tbody>
    </table>
    <ul id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_OptionList" class="ajax__combobox_itemlist" style="visibility: hidden; z-index: 1000; overflow: hidden; width: 310px; position: absolute; height: 133px; left: 638px; top: 425px; display: none;">
        <li style="">&nbsp;</li>
        <li style="">Cons / Ou</li>
        <li style="">Coop</li>
        <li style="">Empr Ind</li>
        <li style="">Req E</li>
        <li>Soc A</li>
        <li>Soc E</li>
    </ul>
    <input name="ctl00$ctl00$cphCont$cphContAut$ddlTipoJur$ddlTipoJur_HiddenField" id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_HiddenField" value="0" type="hidden">
</div>
[GeneratedCode("Coded UITest Builder", "12.0.21005.1")]
public class UICphCont_cphConteCustom : HtmlCustom
{

    public UICphCont_cphContCustom(UITestControl searchLimitContainer) : 
            base(searchLimitContainer)
    {
        #region Search Criteria
        this.SearchProperties["TagName"] = "UL";
        this.SearchProperties["Id"] = "cphCont_cphContAut_ddlTipoJur_ddlTipoJur_OptionList";
        this.SearchProperties[UITestControl.PropertyNames.Name] = null;
        this.FilterProperties["Class"] = "ajax__combobox_itemlist";
        this.FilterProperties["ControlDefinition"] = "class=\"ajax__combobox_itemlist\" id=\"cphC";
        this.FilterProperties["TagInstance"] = "1";
        this.WindowTitles.Add("Test");
        #endregion
    }
public HtmlCustom UISocaCustom
        {
            get
            {
                if ((this.mUISocaCustom == null))
                {
                    this.mUISocaCustom = new HtmlCustom(this);
                    #region Search Criteria
                    this.mUISocaCustom.SearchProperties["TagName"] = "LI";
                    this.mUISocaCustom.SearchProperties["Id"] = null;
                    this.mUISocaCustom.SearchProperties[UITestControl.PropertyNames.Name] = null;
                    this.mUISocaCustom.FilterProperties["Class"] = null;
                    this.mUISocaCustom.FilterProperties["ControlDefinition"] = null;
                    this.mUISocaCustom.FilterProperties["InnerText"] = "Soc A";
                    this.mUISocaCustom.FilterProperties["TagInstance"] = "6";
                    this.mUISocaCustom.WindowTitles.Add("tEST");
                    #endregion
                }
                return this.mUISocaCustom;
            }
        }
选定的LI元素如下所示:

<div id="cphCont_cphContAut_ddlTipoJur" class="ComboAzul" style="display:inline-block;">
    <table id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_Table" class="ajax__combobox_inputcontainer" style="border-width:0px;border-style:None;border-collapse:collapse;display:inline-block;position:relative;top:5px;" cellpadding="0" cellspacing="0">
        <tbody>
            <tr>
                <td class="ajax__combobox_textboxcontainer">
                    <input name="ctl00$ctl00$cphCont$cphContAut$ddlTipoJur$ddlTipoJur_TextBox" id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_TextBox" tabindex="3" autocomplete="off" style="width: 260px; margin: 0px;" type="text">
                </td>
                <td class="ajax__combobox_buttoncontainer">
                    <button style="height: 18px; width: 18px; margin: 0px; padding: 0px; visibility: visible;" id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_Button" type="button"></button>
                    </td>
            </tr>
        </tbody>
    </table>
    <ul id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_OptionList" class="ajax__combobox_itemlist" style="visibility: hidden; z-index: 1000; overflow: hidden; width: 310px; position: absolute; height: 133px; left: 638px; top: 425px; display: none;">
        <li style="">&nbsp;</li>
        <li style="">Cons / Ou</li>
        <li style="">Coop</li>
        <li style="">Empr Ind</li>
        <li style="">Req E</li>
        <li>Soc A</li>
        <li>Soc E</li>
    </ul>
    <input name="ctl00$ctl00$cphCont$cphContAut$ddlTipoJur$ddlTipoJur_HiddenField" id="cphCont_cphContAut_ddlTipoJur_ddlTipoJur_HiddenField" value="0" type="hidden">
</div>
[GeneratedCode("Coded UITest Builder", "12.0.21005.1")]
public class UICphCont_cphConteCustom : HtmlCustom
{

    public UICphCont_cphContCustom(UITestControl searchLimitContainer) : 
            base(searchLimitContainer)
    {
        #region Search Criteria
        this.SearchProperties["TagName"] = "UL";
        this.SearchProperties["Id"] = "cphCont_cphContAut_ddlTipoJur_ddlTipoJur_OptionList";
        this.SearchProperties[UITestControl.PropertyNames.Name] = null;
        this.FilterProperties["Class"] = "ajax__combobox_itemlist";
        this.FilterProperties["ControlDefinition"] = "class=\"ajax__combobox_itemlist\" id=\"cphC";
        this.FilterProperties["TagInstance"] = "1";
        this.WindowTitles.Add("Test");
        #endregion
    }
public HtmlCustom UISocaCustom
        {
            get
            {
                if ((this.mUISocaCustom == null))
                {
                    this.mUISocaCustom = new HtmlCustom(this);
                    #region Search Criteria
                    this.mUISocaCustom.SearchProperties["TagName"] = "LI";
                    this.mUISocaCustom.SearchProperties["Id"] = null;
                    this.mUISocaCustom.SearchProperties[UITestControl.PropertyNames.Name] = null;
                    this.mUISocaCustom.FilterProperties["Class"] = null;
                    this.mUISocaCustom.FilterProperties["ControlDefinition"] = null;
                    this.mUISocaCustom.FilterProperties["InnerText"] = "Soc A";
                    this.mUISocaCustom.FilterProperties["TagInstance"] = "6";
                    this.mUISocaCustom.WindowTitles.Add("tEST");
                    #endregion
                }
                return this.mUISocaCustom;
            }
        }
我用来用csv数据替换登录名和密码的代码是:

public void MetdG()
    {
        this.UIMap.TesterParams.UITxtLoginEditText = TestContext.DataRow["login"].ToString();
        this.UIMap.TesterParams.UITxtSenhaEditPassword = Playback.EncryptText(TestContext.DataRow["senha"].ToString());
        this.UIMap.Tester();
        // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
    }
你知道怎么做吗

编辑:按照

创建了一个静态类来保存浏览器窗口:

[CodedUITest]
public static class GlobalVars
{
    public static BrowserWindow myWindow;
}
已编辑测试初始值设定项方法以匹配此更改:

[TestInitialize()]
    public void BrowserStarter()
    {
        GlobalVars.myWindow = BrowserWindow.Launch(new Uri("www.google.com"));
    }
已编辑MainG方法,以便窗口可以执行脚本:

 GlobalVars.myWindow.ExecuteScript("var xpath = li[text()='Soca'];var matchingElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;);matchingElement.innerHTML = arguments[0];", TestContext.DataRow["type"].ToString());

现在的问题是脚本正在抛出异常。我相信这是因为它在元素存在之前就在搜索它(在这一点之前,测试会经过2或3页)

您试图做的是更改列表项的内部html,而不是像在
元素中那样输入文本,所以您需要这样做并修改DOM。由于这不是用户的正常操作(单击此按钮,在此处输入文本,展开此组合框等),因此必须使用javascript来完成

browserWindow.ExecuteScript("var elements = document.getElementsByTagName('li')

for (var i = 0; i < elements.length; i++) {
 if (elements[i].innerHTML.indexOf("Soc A") !== -1) {
     elements[i].innerHTML = arguments[0];
     break;
 }
}", TestContext.DataRow["type"].ToString());
//Comment to fill space
对他昨天提供的所有帮助的主要支持

通过添加以下代码行解决了此问题:

this.UIMap.TestWindow.TestDocument5.UIContCustom.UISocaCustom.
SearchProperties[HtmlCustom.PropertyNames.InnerText] = 
TestContext.DataRow["type"].ToString();
作为测试的第5页(如预期),
UIContCustom
UL元素和测试生成的自定义HTML元素


值得注意的是,试图通过
GetProperty
更改
InnerText
的值将失败,因为它将抛出一条只读的消息。

我不能强制转换它=/My
csvData
将是->
TestContext.DataRow[“type”]。ToString()
它会引发强制转换问题!很抱歉我对这方面还不熟悉。演员的具体失败在哪里?它不应该试图将字符串强制转换成任何不同的形式。另外,该列的csv中的值类型是什么?我抛出了这样一个问题:“非静态字段、方法或属性‘Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow.ExecuteScript(string,params object[])需要对象引用。”您的
  • 的innerHTML是否总是“Soc A”?在测试中它是。。但我有4个其他选项,根据csv列的值而有所不同