检查控制可见性的替代方法?

时间:2014-01-13 05:23:02

标签: c# asp.net webforms

<div id="mydiv" runat="server" class="mydivclass" style="display: none">
    <label class="medium" for="txtEntityName">Name of something:</label>
    <br />
    <asp:TextBox ID="txtEntityName" runat="server"></asp:TextBox><br />
</div>

我需要能够检查我的TextBox是否可见。检查txtEntityName.Visible似乎不起作用,也不检查txtEntityName.Style [&#34; display&#34;] ==&#34; none&#34;因为在html中,&#34;显示:无&#34;似乎只适用于div本身。也就是说,div内部的文本框是不可见的,但它不包含该样式。

是否有其他方法可以检查文本框是否可见?或者将txtEntityName的风格明确地绑定到mydiv&s; s? 我知道可以直接设置TextBox的可见性,但我想看看在我走这条路之前是否还有其他选择。

2 个答案:

答案 0 :(得分:3)

虽然在Coded UI Test中无法直接检查控件的可见性,但我们可以通过几种方法进行检查。

  1. 使用UITestControlNotVisibleException异常

  2. 使用自定义方法

  3.   

    1.使用UITestControlNotVisibleException异常

    使用这种方法,我们可以确保给定的控件是否可见。通过这种方法,首先我们必须执行一些操作,如设置控件值,以便Coded UI Test可以触发此异常。一旦触发了这个异常,就按下Assert.Fail('message');

        try
        {
    
        }
        catch(UITestControlNotVisibleException exp)
        {
            Assert.Fail("textboxName
                control is invisible on web page.");
        }
    

    但是使用这种方法很好,因为有时相同的异常不会触发。 另一种方法是使用自定义方法。

      

    2.使用自定义方法

    编码的UI测试提供了一个名为BoundingRectangle的属性,它给出了控件在网页上的位置。如果在网页上看不到控件,则控件的X和Y坐标设置为-1。 我们可以创建自定义扩展方法并直接在TestUiControls上调用。例如 -

         public static class CodedUITestControlsLibrary
        {
           public bool IsVisible(this HtmlControl HtmlControlToCheckForVisiblity)
           {
            var xCordinate =  HtmlControlToCheckForVisiblity.BoundingRectangle.X;
            var yCordinate = HtmlControlToCheckForVisiblity.BoundingRectangle.Y;
    
            return(xCordinate>-1 && yCordinate>-1);
           }
        }
    
        [TestMethod]
        public void MyTestMethod()
        {
            var HtmlDivControl = {find HtmlDiv Control};
            Assert.IsTrue(HtmlDivControl.IsVisible(),
            "Expected HtmlDiv Control is not visible.");
        }
    

    在上面的代码中,有一个名为IsVisible()的扩展方法,可以调用从HtmlControl基本控件继承的任何类型的CodedUI控件。

答案 1 :(得分:1)

您可以使用jQuery :visible选择器。以下是测试方法:

添加功能以测试可见性。添加输入以触发该功能。您的标记可能如下所示:

<head runat="server">
    <title></title>
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    <script type="text/javascript">
        function test() {
            if ($('#<%= txtEntityName.ClientID %>').is(':visible')) {
                alert("Visible");
            }
            else {
                alert("Not Visible");
            }

        };

    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <div id="mydiv" runat="server" class="mydivclass" style="display: none">
                <label class="medium" for="txtEntityName">Name of something:</label>
                <br />
                <asp:TextBox ID="txtEntityName" runat="server"></asp:TextBox><br />
            </div>
            <input type="button" onclick="test();" value="test" />

        </div>
    </form>
</body>

免责声明:具有可见性的元素:隐藏或不透明度:0被视为可见。来源::visible Selector