2014-01-13 6 views
2
<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 ["display"] == "none", потому что в html, "display: none", похоже, применим только к самому div. То есть текстовое поле внутри div невидимо, но оно не содержит этого стиля.Альтернативные способы проверки видимости контроля?

Есть ли альтернативные способы проверки видимости текстового поля? Или способ привязать стиль txtEntityName явно к mydiv's? Я знаю, что мог бы напрямую установить видимость TextBox, но я хотел посмотреть, есть ли какие-либо альтернативы, прежде чем я спустился по этому маршруту.

ответ

3

Несмотря на то, что проверка кода в контрольном режиме напрямую не проверяется, но есть несколько способов, с помощью которых мы можем выполнить эту проверку.

  1. Использование UITestControlNotVisibleException Exception

  2. Используя специальный метод

1.Using UITestControlNotVisibleException Exception

Используя этот подход, мы можем убедиться, является ли или нет данный контроль видимо или нет t.Для этого подхода, прежде всего, мы должны выполнить некоторые действия, такие как установочное значение управления, чтобы это исключение могло быть запущено с помощью Coded UI Test. Как только это исключение будет запущено, нажмите «Assert.Fail» («сообщение»);

try 
    { 

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

Но использование этого метода является хорошим, поскольку иногда одно и то же исключение не срабатывает. Альтернативный подход - использование пользовательского метода.

2.Using пользовательский метод

Coded Test 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 продление(), который может быть вызван любой вид CodedUI Control унаследованный от базового управления HTMLControl.

+0

Хотя этот ответ выглядит очень информативным, OP не упомянул кодированный пользовательский интерфейс. Я буду ждать ответа OP перед вылетом. – afzalulh

+0

К сожалению, это решение сложнее, чем мне нужно. Однако это аккуратное решение. – joelliusp

+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.

+0

В конечном итоге я решил установить флаг для отдельных элементов. Поэтому спасибо за ответ, но я решил не использовать его. – joelliusp

+0

Все в порядке. Вы все равно можете принять и/или отложить ответ, если найдете его полезным. – afzalulh

Смежные вопросы