2014-10-22 5 views
-2

Я запускаю тестовый проект в визуальных студиях, на которых выполняются шаги тестирования для веб-страницы.Получение объекта HtmlHyperLink из HtmlDiv Использование C#

Сами страницы плохо кодируются. это что-то вроде этого:

<a id ="GenericButton" </a> 

<div id="UniqueID" class="ThisDiv"> 
    <a id ="GenericButton" </a> 
</div> 

Проблема, что у меня есть, что мне нужно нажать на ссылку внутри DIV «UniqueID». Я не хочу щелкнуть по первой веб-кнопке.

Используя код:

HtmlHyperlink myLink = new HtmlHyperlink(this.IE); 
myLink.SearchProperties[HtmlHyperlink.PropertyNames.Id] = "GenericButton"; 
Mouse.Click(myLink) 

приведет к нажатию на первую кнопку вместо кнопки внутри DIV "UniqueID"

я могу получить DIV с помощью:

HtmlDiv myDiv = new HtmlDiv(this.IE); 
myDiv.SearchProperties[HtmlCheckBox.PropertyNames.Class] = "ThisDiv"; 
myDiv.SearchProperties[HtmlCheckBox.PropertyNames.Id] = "UniqueID"; 
//The below line is later referenced 
int myDivTag = myDiv.TagInstance; 

Но как я могу захватить рамку внутри этого div?

Кроме того, при отладке объект myDiv, похоже, не настроен должным образом в Visual Studio, пока не будет запущена строка «int myDivTag = myDiv.TagInstance;». Почему отладчик не знает, к какому объекту я имею в виду, пока это не произойдет?

Я использую библиотеки Visual Studio для этих операций, а не что-то вроде WatiN.

+1

Во-первых, вы должны исправить разметку. ' melancia

+0

Исправлено. теперь, что я могу сделать? – user2589339

+0

Является ли ваш сайт вашим? В первом случае сайт должен быть * testable *, поэтому, если он находится под вашим контролем, его фиксация будет выплачивать дивиденды. – Arran

ответ

2

Если на веб-странице плохо написано код, тесты для веб-страницы должны завершиться неудачно для битов, которые были реализованы плохо - просто.

В HTML два элемента не должны иметь одинаковый идентификатор. Поэтому напишите свои тесты, ожидая только одного элемента. Так как входная разметка для вашего теста будет содержать два элемента с одинаковым идентификатором, тест должен завершиться неудачно и остаться неудачным, пока проблема не будет исправлена ​​на другом конце.

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

Обновление: Я нашел this answer, которые могут дать решение найти вложенную a элемент.

+0

Я согласен, но у меня нет доступа к этому коду. Что я могу сделать? – user2589339

+0

Хорошо, что все зависит от цели вашего тестирования, которое вам нужно будет объяснить. Зачем нужно щелкнуть эту конкретную кнопку? – Adrian

+0

Первая кнопка на самом деле не видна. однако он все еще существует в html-коде. Но обе кнопки имеют ту же цель. При определенных условиях появляется первая кнопка и становится кликабельной. но в условиях тестирования он должен оставаться невидимым. Однако проблема веб-страницы является независимой от моей проблемы. Как я могу захватить ссылку, которая должна находиться внутри div? – user2589339

1

Адриан дал полезную ссылку на исправление: How to handle testing an HTML control that lacks sufficiently unique attributes?

HtmlDiv myDiv = new HtmlDiv(this.IE); 
myDiv.SearchProperties[HtmlDiv.PropertyNames.Class] = "ThisDiv"; 
myDiv.SearchProperties[HtmlDiv.PropertyNames.Id] = "UniqueID"; 
HtmlHyperlink myLink = new HtmlHyperlink(myDiv); 
myLink.SearchProperties[HtmlHyperlink.PropertyNames.id] = "GenericButton"; 

Mouse.Click(myLink);