Вземете цялото ‹td› заглавие на колона на таблица с кодиран потребителски интерфейс

Трябва да проверя филтърна функция на маса.

Този филтър е само в първата клетка на всеки ред и се опитвам да разбера как да получа всички тези стойности...

Пробвах с нещо подобно

public bool CheckSearchResults(HtmlControl GridTable, string FilterTxt)
{
    List<string> Elements = new List<string>();

    foreach (HtmlCell cell in GridTable.GetChildren())
    {
        Elements.Add(cell.FilterProperties["title"]);
    }
    List<string> Results = Elements.FindAll(l => l.Contains(FilterTxt));
    return Results.Count == Elements.Count;
}

но се забивам в цикъла foreach... може би има прост начин с linq, но не го знам толкова много


редактиране: всички клетки, от които се нуждая, имат един и същ персонализиран html таг.

с този код трябва да ги получа всичките, но не знам как да повторя

HtmlDocument Document = this.UIPageWindow.UIPageDocument;
HtmlControl GridTable = this.UIPageWindow.UIPageDocument.UIPageGridTable;
HtmlCell Cells = new HtmlCell(GridTable);
Cells.FilterProperties["custom_control"] = "firstCellOfRow";

също защото няма функция GetEnumerator или модели на заявки за HtmlCell обекти, които са част от библиотеката Microsoft.VisualStudio.TestTools.UITesting.HtmlControl -.-


edit2: намерих тази статия и опитах това

public bool CheckSearchResults(string FilterTxt)
{
    HtmlDocument Document = this.UIPageWindow.UIPageDocument;
    HtmlControl GridTable = this.UIPageWindow.UIPageDocument.UIPageGridTable;

    HtmlRow rows = new HtmlRow(GridTable);
    rows.SearchProperties[HtmlRow.PropertyNames.Class] = "ui-widget-content jqgrow ui-row-ltr";

    HtmlControl cells = new HtmlControl(rows);
    cells.SearchProperties["custom_control"] = "firstCellOfRow";

    UITestControlCollection collection = cells.FindMatchingControls();

    List<string> Elements = new List<string>();

    foreach (UITestControl elem in collection)
    {
        HtmlCell cell = (HtmlCell)elem;
        Elements.Add(cell.GetProperty("Title").ToString());
    }
    List<string> Results = Elements.FindAll(l => l.Contains(FilterTxt));
    return Results.Count == Elements.Count;
}

но получавам празна колекция...


person Doc    schedule 03.02.2014    source източник


Отговори (2)


Опитайте Cell.Title или Cell.GetProperty("Title"). SearchProperties и FilterProperties са там само за търсене на UI елемент. Те идват или от UIMap, или от код, ако ги попълните на ръка. В противен случай вашият код трябва да работи.

Или можете да използвате LINQ заявка (?) като:

var FilteredElements = 
    from Cell in UIMap...GridTable.GetChildren()
    where Cell.GetProperty("Title").ToString().Contains(FilterTxt)
    select Cell;

Можете също да опитате да запишете клетка, да я добавите към UIMap, да зададете нейните свойства за търсене или филтър, за да съответстват на вашето филтриране, след това да извикате UIMap...Cell.FindMatchingControls() и тя трябва да върне всички съответстващи клетки.


Проблемът сега е, че ограничавате търсенето си до един ред от таблицата. HtmlControl cells = new HtmlControl(rows); тук параметърът на конструктора задава контейнер за ограничение на търсенето, а не прекия родител на контролата. Трябва да е GridTable, ако искате да търсите във всички клетки в таблицата. Най-доброто решение би било да използвате рекордера, за да получите контрола на клетка, след което да промените свойствата му за търсене и филтър в UIMap, за да съответства на всички клетки, които търсите. По мое мнение трябва да се придържате към ръчно кодирано филтриране. Нещо като:

foreach(var row in GridTable.GetChildren())
{
    foreach(var cell in row.GetChildren())
    {
        //filter cell here
    }
}

Проверете с AccExplorer или рекордера дали йерархията е правилна. Трябва също да използвате отстраняване на грешки, за да сте сигурни дали циклите получават правилните контроли и да видите свойствата на клетките, така че да знаете дали филтърната функция е правилна.

person kida    schedule 03.02.2014
comment
не, не работи по никакъв начин :( редактирах въпроса - person Doc; 03.02.2014
comment
Разгледах редактираната публикация. HtmlCell и по същество всеки UIControl клас, който CUIT използва, представлява ЕДИН UI елемент. Ако искате да получите всички клетки, които отговарят на crtireias, които сте задали, трябва да използвате функцията FindMatchingControlls на вашия клас Cells (както е споменато по-горе). Ако не работи, това означава, че трябва да се занимавате със свойствата за търсене и свойствата на филтъра на вашия контрол. - person kida; 03.02.2014
comment
Опитах FindMatchingControls без успех... редактирах въпроса отново, добавяйки повече подробности - person Doc; 04.02.2014
comment

Този ID > #summary-row { height: 500px; } е проблемът с долния колонтитул, който е покрит от друг DIV, но има други области, които трябва да разгледате, които причиняват структурни проблеми, главно когато прозорецът за изглед е намален.

Вашето съдържание е отрязано от дясната страна на браузъра поради това правило в custom_new.css: .container .row { width: 1140px; margin-left: auto; margin-right: auto; }. Преодоляването на правилата е напълно добре, но е важно да ги приложите или към детайлни екземпляри, така че да не променят цялото ви оформление/други части, които използват същото правило(а) по подразбиране, или да се уверите, че промените ще работят глобално. (Имате и допълнителна затваряща скоба ; в края на първото си правило на Jumbtron).

Ако искате Jumbotron да има запълваща ширина, поставете container div вътре в jumbotron div Вижте документи Bootstrap 3 Jumbotron .

Имате множество класове/ИД (особено за долния колонтитул), които изглеждат излишни и могат да бъдат намалени или комбинирани.

Трябва да е .nav-pills, а не .nav .pills (поне що се отнася до Bootstrap, вижте документите Bootstrap 3 NAVs .

Очевидно има много клопки с всичко ново, тези точки са само за информираност.

Вижте примерен пример за фрагмент по-долу.

@import url('https://fonts.googleapis.com/css?family=Allerta+Stencil%7CAbel%7CRoboto%7CPacifico');
 html {
  overflow-x: hidden;
}
html,
body {
  overflow-y: none;
  height: 100%;
  margin-top: 130px;
}
.navbar.navbar-default {
  background-color: white;
  padding: 35px;
  border-bottom: 10px solid #F2F2F2;
}
.navbar-default .navbar-nav.navbar-right > li > a,
.navbar-default .navbar-nav.navbar-right .dropdown-menu > li > a {
  font-size: 20px;
  font-family: 'Abel', Arial;
  text-transform: uppercase;
  color: black;
}
.navbar-default .navbar-nav.navbar-left > li > a {
  font-family: 'Allerta Stencil', arial;
  font-size: 40px;
  color: black;
}
.jumbotron {
  background-image: url('https://upload.wikimedia.org/wikipedia/commons/e/e6/Los_Angeles_-_Echangeur_autoroute_110_105.JPG');
  width: 100%;
  height: 580px;
  border-bottom: 10px solid #F2F2F2;
  background-position: center;
  background-size: cover;
}
.jumbotron .container h1 {
  font-family: 'Allerta Stencil', arial;
  font-size: 100px;
  text-transform: uppercase;
  font-weight: normal;
  text-align: center;
  text-transform: uppercase;
  margin-top: 70px;
  color: #fff;
}
.jumbotron .container p {
  font-family: 'Pacifico', arial;
  text-align: center;
  font-size: 60px;
  margin-top: 30px;
  color: #fff;
}
#summary-row p {
  padding-top: 15px;
  text-align: center;
}
#summary-row img:hover {
  filter: brightness(70%);
  -webkit-filter: brightness(70%);
  transition-duration: 0.3s;
  -webkit-transition-duration: 0.3s;
}
footer {
  font-family: 'Abel', Arial;
  bottom: 0;
  height: 175px;
  margin-top: 25px;
  padding: 30px 5px;
  width: 100%;
  background-color: #404241;
  color: white;
}
footer a {
  color: white;
  text-decoration: none;
}
footer ul.nav.nav-pills > li {
  text-transform: uppercase;
  text-align: left;
}
footer ul.nav.nav-pills > li > a:hover,
footer ul.nav.nav-pills > li > a:focus {
  background-color: red;
  color: white;
  border-radius: 0;
}
footer .rightside {
  font-size: 30px;
  text-align: right;
}
@media (max-width: 767px) {
  .jumbotron {
    height: 380px;
  }
  .jumbotron .container h1 {
    font-size: 50px;
    margin-top: 30px;
  }
  .jumbotron .container p {
    font-size: 30px;
    margin-top: 10px;
  }
  footer .rightside {
    margin-top: 10px;
    font-size: 15px;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<nav class="navbar navbar-default navbar-fixed-top">
  <div class="container">
    <div class="navbar-header">
      <button class="navbar-toggle" data-target=".navbar-collapse" data-toggle="collapse" type="button"><span class="icon-bar"></span>  <span class="icon-bar"></span>  <span class="icon-bar"></span>

      </button>
    </div>
    <div class="navbar-collapse collapse" id="navbar">
      <ul class="nav navbar-nav navbar-left">
        <li> <a href="http://www.jonhowlett.uk/home_page.html">JH</a>

        </li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="/bg#">About<span class="caret"></span></a>

          <ul class="dropdown-menu">
            <li> <a href="/bg#">Biography</a>

            </li>
            <li> <a href="http://www.jonhowlett.uk/hobbies.html">Hobbies</a>

            </li>
            <li> <a href="http://www.jonhowlett.uk/resume.html">Work
                            History</a>

            </li>
          </ul>
        </li>
        <li> <a href="/bg#">Portfolio</a>

        </li>
        <li> <a href="/bg#">Contact</a>

        </li>
      </ul>
    </div>
  </div>
</nav>
<div class="jumbotron">
  <div class="container">
    <!--style as .container .jumbotron-->
    <h1>Jon Howlett</h1>

    <!--style as .jumbotron .container h1-->
    <p>Aspiring web designer and front-end developer</p>
    <!--style as .jumbotron .container p-->
  </div>
</div>
<!--remove padding-->
<div class="container">
  <div class="row" id="summary-row">
    <div class="col-md-4">
      <img src="https://www.airshare.co.nz/sites/default/files/NZ_0.jpg" class="img-responsive" alt="placeholder">
      <p>ultrices mollis pulvinar enim, in diam. Cras posuere justo tempor pretium vitae, urna consectetuer amet ultricies diam morbi provident, quos ut ipsum, tempus fusce, eget nullam condimentum suscipit suspendisse. Semper nulla at, leo ut, sed metus
        nunc eros a, et sapien nisl wisi magna dolor, sit lorem hymenaeos. Orci morbi</p>
    </div>
    <div class="col-md-4">
      <img src="https://www.airshare.co.nz/sites/default/files/NZ_0.jpg" class="img-responsive" alt="placeholder">
      <p>ultrices mollis pulvinar enim, in diam. Cras posuere justo tempor pretium vitae, urna consectetuer amet ultricies diam morbi provident, quos ut ipsum, tempus fusce, eget nullam condimentum suscipit suspendisse. Semper nulla at, leo ut, sed metus
        nunc eros a, et sapien nisl wisi magna dolor, sit lorem hymenaeos. Orci morbi</p>
    </div>
    <div class="col-md-4">
      <img src="https://www.airshare.co.nz/sites/default/files/NZ_0.jpg" class="img-responsive" alt="placeholder">
      <p>ultrices mollis pulvinar enim, in diam. Cras posuere justo tempor pretium vitae, urna consectetuer amet ultricies diam morbi provident, quos ut ipsum, tempus fusce, eget nullam condimentum suscipit suspendisse. Semper nulla at, leo ut, sed metus
        nunc eros a, et sapien nisl wisi magna dolor, sit lorem hymenaeos. Orci morbi</p>
    </div>
  </div>
</div>
<footer>
  <div class="container">
    <div class="row">
      <div class="col-xs-6">
        <ul class="nav nav-pills">
          <li> <a href="/bg#">Twitter</a>

          </li>
          <li> <a href="/bg#">Facebook</a>

          </li>
          <li> <a href="/bg#">LinkedIn</a>

          </li>
        </ul>
      </div>
      <div class="col-xs-6">
        <div class="rightside">
          <div id="telephone">07557 302 517</div>
          <div id="email">[email protected]</div>
        </div>
      </div>
    </div>
  </div>
</footer>

- person kida; 04.02.2014
comment
Опитах всичките ви предложения, но нищо не работи. (Записващото устройство е доста безполезно) Написах функция за получаване на td заглавия чрез изтриване на страниците html. Глупав кодиран потребителски интерфейс :D - person Doc; 04.02.2014

Разреших сам изтриването на html страници

static public List<string> GetTdTitles(string htmlCode, string TdSearchPattern)
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(htmlCode);
    HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//td[@" + TdSearchPattern + "]");
    List<string> Results = new List<string>();
    foreach (HtmlNode node in collection)
    {
        Results.Add(node.InnerText);
    }

    return Results;
}

Адски мразя тези глупави кодирани потребителски тестове -.-

btw, благодаря за помощта

person Doc    schedule 04.02.2014