Использование Java и Selenium.
У нас есть метод waitForXPathVisibility (xpath), который в конечном итоге вызывает wait.untilExpectedConditions ... visibilityOfElement. Этот метод работает отлично. Я просто сократил это здесь. Так что поверьте мне, что waitForXpathVisibility (xpath) будет ждать, пока он не станет видимым.
Итак, у нас есть страница медицинских специальностей. Первоначально это было только на английском языке. Так что если вы ищете «neuro», HTML будет выглядеть примерно так:
<ul id="ui-id-1" tabindex="0" class="ui-menu ui-widget ui-widget-content ui-autocomplete ui-front" style="width: 476.672px; position: relative; top: -1005px; left: 542.828px; display: none;">
<LI class="ui-menu-item"> Neurology</Li>
<LI class="ui-menu-item"> Neuro Surgeon </li>
</UL>
Затем они добавили испанский, так что не все результаты вернутся, но будут видны только испанские. Новый
в конец предыдущего. И UL, даже отображаемые, имеют «display; none» как часть идентификатора стиля.
Ранее при выполнении поиска я делал бы
waitForXpathVisibility("//li[@class='ui-menu-item']");
который вернется. Но поиск всегда находит первый, поэтому приведенный выше xpath будет указывать на первый английский, который больше не будет виден, поэтому время ожидания истечет.
Есть ли способ подождать, пока какой-либо элемент, соответствующий xpath, будет виден? Обратите внимание, что visibilityOfAllElements () не будет работать, потому что не все они будут видны.
Полагаю, что можно сделать, предварительно получить счетчик всех элементов с @id и с "width" как частью стиля. «display; none» не будет работать, потому что есть другие s с этим значением. Затем выполните поиск и подождите, пока число s увеличится на 1, получите идентификатор последнего, а затем подождите, пока под ним не появится
, но это кажется немного большим. Должно быть как-то ждать видимого ? Я мог тогда вернуть его родителя