Непонятно, с какого элемента вы начинаете поиск, но у вас есть два элемента с этим именем. Один из них - это элемент управления со списком, другой - элемент управления редактированием. Попробуйте использовать AndCondition
для объединения нескольких объектов PropertyCondition:
var nameCondition = new PropertyCondition(AutomationElement.NameProperty, "Search or enter address");
var controlCondition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit);
var condition = new AndCondition(nameCondition, controlCondition);
AutomationElement editBox = element.FindFirst(TreeScope.Subtree, condition);
// use ValuePattern to get the value
Если поиск начинается с поля со списком, вы можете вместо этого изменить TreeScope.Subtree
на TreeScope.Descendants
, поскольку Subtree включает текущий элемент в поиск.
Вы можете добавить css, чтобы он по умолчанию был скрыт, код загрузки не требуется:
#myDialog { display: none; }
При этом никакой другой код не нужен, когда вы откроете диалоговое окно, он изменит этот стиль ... так что ничего дополнительного для запуска на document.ready
. В качестве альтернативы, если у вас много диалогов, дайте ему класс, например:
<div id="myDialog" class="dialog"></div>
С этим CSS:
.dialog { display: none; }
Почти во всех случаях, jQuery использует атрибут стиля display
для скрытия вещей, поэтому использование этого для первоначального скрытия чего-либо будет работать с тем, что вы хотите использовать элемент позже, будь то диалоговое окно, простой .fadeIn()
и т. Д.
Я предложил решение этой проблемы, которое работает нормально, но мне интересно, знает ли кто-нибудь лучший способ.
Проблема в том, что браузер визуализирует DOM по мере его загрузки, а затем запускает JQuery .js в конце, который его скрывает. Итак, что я делаю, это отключаю видимость в родительском теге
<div id="bodyDiv" style="visibility:hidden">
<div id = "myDialog">
<!-- ... more html in here for the dialog -->
</div>
</div>
, затем JQuery .js:
<script type="text/javascript">
$(document).ready(function() {
//turn the visibility on last thing
$("#bodyDiv").attr("style", "visibility:visible");
});
</script>
, как вы можете видеть, я просто по умолчанию отключил видимость всего, чтобы страница отображалась без отображения содержимого диалогового окна, затем я снова включаю видимость. Это не идеальное решение, потому что оно может заставить страницу вести себя забавно на секунду, но, по крайней мере, диалоговое окно HTML не отображается в строке. UX с этим исправлением приемлем, хотя и не идеален.